在Laravel中,与另一个关系具有 belongs to
关系的模型,其表上还有一个 <parent>_id
字段,指向父级的 id
. 当该模型与另一个模型相关联时, updated_at
timespamp会自然更新,因为 <parent>_id
字段的值会发生变化 .
但是,父模型(具有 has many
关系的父模型)在变为或停止与子模型相关时没有任何更改的字段,因此其 updated_at
timespamp不会更改 .
我想要的是,每次创建或删除两者之间的关系时,父模型和子模型都会自动更新它们的 updated_at
次浮点数 . 实现这个目标的正确方法是什么?
我已经查看了touches属性,这会导致父级的时间戳在子级被修改时自动更新 . 但这仅适用于创建新关系时,而不适用于删除旧关系时 . 而且,这将更新任何字段更改时父级的时间戳,而不仅仅是 <parent>_id
和's something that I don'实际需要的字段 .
2 回答
您可以使用Eloquent提供的touch方法来更新父级的updated_at时间戳 .
如果我没有想到"automatically"这样做的方法,除非在需要时调用此内联或在子项上使用适当的Eloquent Events(例如创建和删除或创建和删除)以触摸父级的时间戳 .
取自Laravel Docs .
触摸父时间戳
当模型
belongsTo
或belongsToMany
另一个模型(例如属于Post
的Comment
)时,更新子模型时更新父级的时间戳有时会很有帮助 . 例如,更新Comment
模型时,您可能希望自动"touch"拥有Post
的updated_at
时间戳 . Eloquent让事情变得简单 . 只需将包含关系名称的touches
属性添加到子模型:现在,当您更新
Comment
时,拥有的Post
也会更新其updated_at
列,这样可以更方便地知道何时使Post
模型的缓存无效:更新
模型上的删除方法确实更新了所有者时间戳方法取自Illuminate \ Database \ Eloquent \ Model.php
要手动更新,您可以运行
$this->touchOwners();