假设您有一个与许多角色相关的模型用户,其中的角色也由其他用户共享。
用户模型在数据库上还有一个 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
每次相关的内容都会被附加/分离/更新。但当然一切都取决于应用程序的需求。也许在某些情况下这将是一个很好的解决方案,但目前我想不出任何解决方案。
关于php - Laravel 5.2.x 在保存相关模型时更改模型中的 Updated_at 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36601431/