更新单..。
$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
复制相似问题