如何在hasMany/belongsTo关联中检测子模型的wasChanged()状态?
解决Laravel关联模型中子模型的
wasChanged()检查问题 updateOrCreate方法本身会返回创建或更新后的子模型实例,你需要把这个实例保存到变量中,然后直接调用该实例的wasChanged()方法,而不是通过关联对象($parent->children())去调用。
修改后的代码示例:
$parent = Parent::updateOrCreate([ ... ], [ ... ]); if ($parent->wasChanged()) { // 父模型变更后的逻辑 } foreach ($contents as $child) { // 保存updateOrCreate返回的子模型实例 $childModel = $parent->children()->updateOrCreate([/* 匹配条件 */], [/* 要更新/创建的数据 */]); // 检查子模型是否有变更 if ($childModel->wasChanged()) { // 子模型变更后的逻辑 } }
补充说明:
updateOrCreate的返回值是对应的子模型(Contents)实例,该实例继承了Laravel模型的所有方法,包括wasChanged()。- 如果需要检查特定字段是否变更,可以给
wasChanged()传字段名,比如$childModel->wasChanged('title'),精准判断某个字段是否被修改。
内容的提问来源于stack exchange,提问作者CXJ
相关产品推荐
相关产品推荐

