You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 19:35:24