php - Laravel 5.2.x 在保存相关模型时更改模型中的 Updated_at 字段?

标签 php laravel eloquent laravel-5

假设您有一个与许多角色相关的模型用户,其中的角色也由其他用户共享。

用户模型在数据库上还有一个 Updated_at 字段,当更新用户的任何字段时,该字段会更新为当前时间。如果用户的姓名发生变化,其updated_at字段也会发生变化。

如果您只是更改用户相关角色会发生什么? 是否应该更新updated_at字段?

如果是这样,有什么方法可以在更新用户的相关角色时自动更新此字段?

我的解决方案:

public function update(Request $request, $id) 
{
    ...

    $user->update($data);
    $roles = $user->roles()->sync($request->get('roles'));

    if (!empty($roles['attached']) || 
        !empty($roles['detached'])) { // <!-- Is there a better way to check these conditions?

        $user->touch();
    }
}

最佳答案

您可以做的是将以下属性添加到Role 模型中:

protected $touches = ['user'];

您还需要具有以下关系:

public function user() 
{
   return $this->belongsToMany(User::class);
}

这样,当您每次为用户附加或分离角色时,updated_at 字段都会为这些用户更新。

请注意,当您仅更新角色模型时,也会使用此功能 - 如果您更新它,将为分配了此角色的用户自动更新 updated_at 列。

编辑

抱歉,我错过了您询问是否应该这样做的部分。在我看来——而不是。在 updated_at 中,您应该在直接对象更新时保持不变。如果您有例如用户模型并且对于每个用户您也有配置文件模型,我可以理解它。在这种情况下,更新配置文件模型可能会导致更新用户模型的时间戳,但在这种情况下我不会使用它。如果需要,您可以在数据透视表中使用时间戳字段,并且如果您需要保留一些更改历史记录,我宁愿为此创建专用解决方案来保存与用户相关模型的更改日期,而不是简单地更新 updated_at 每次相关的内容都会被附加/分离/更新。但当然一切都取决于应用程序的需求。也许在某些情况下这将是一个很好的解决方案,但目前我想不出任何解决方案。

引用:Touching parent timestamps

关于php - Laravel 5.2.x 在保存相关模型时更改模型中的 Updated_at 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36601431/

相关文章:

java - 在 php 中创建 Java 日期时出错

php - youtube-dl 和 php exec

php - 如何在使用 MySQL 的子查询中执行 LEFT JOIN 两个表并从主查询中排除多行?

php - 预测/纠正全文搜索

php - 使用分页将散列附加到 Laravel 中的 url

laravel - 找不到列 : 1054 Unknown column 'orders.deleted_at' in 'where clause'

php - Laravel 过滤有很多结果

php - 在 PHP 中列出可用字体

laravel - 如何重写 Laravel 包函数

laravel - 在 Laravel 中如何对数据库表列使用蛇形大小写,对模型属性使用驼色大小写