更新单..。
$modelA->update(['status_id' => 1])
更新倍数..。
ModelA::whereIn('id', $data['ids'])->update(['status_id' => 1])
所以
将模型相关的更新到单个行可以如下所示.
$modelA->relatedModel()->update(['status_id' => 1])
($modelA实例通过路由模型绑定提供,relatedModel()方法/关系在"ModelA“模型中定义)
但
在尝试以下操作时,
ModelA::whereIn('id', $data['ids'])->relatedModel()->update(['status_id' => 1])
我犯了个错误
调用未定义方法Illuminate\Database\Eloquent\Builder::relatedModel()
我似乎不太明白
ModelA::whereIn('id', $data['ids'])
因此,我要寻找的是一种更新多行相关模型的方法(显然没有任何类型的循环)。
发布于 2022-03-21 18:42:54
whereIn()
和许多其他方法(如where()
、has()
、with()
等)返回一个Builder
实例,该实例允许您链接其他查询。不能访问ModelA
实例方法,如生成器实例上的relatedModel()
。
您需要调用->get()
,并迭代调用relatedModel()->update()
的结果
foreach(ModelA::whereIn('id', $data['ids'])->get() as $modelA) {
$modelA->relatedModel()->update(['status_id' => 1]);
}
或者,如果您想要一个没有循环的单线行,则需要直接查询ModelB
模型(或任何relatedModel()
):
ModelB::whereIn('model_a_id', $data['ids'])->update(['status_id' => 1]);
注意:假设ModelB
有一个model_a_id
。如果没有,则可以使用whereHas()
方法:
ModelB::whereHas('modelA', function ($query) use ($data) {
return $query->whereIn('model_a.id', $data['ids'];
})->update(['status_id' => 1]);
注:同样,对您的表/列名称做了一些假设;根据需要进行调整。
https://stackoverflow.com/questions/71561815
复制相似问题