首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >大容量更新相关模型

大容量更新相关模型
EN

Stack Overflow用户
提问于 2022-03-21 17:38:04
回答 1查看 49关注 0票数 1

更新单..。

$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'])

因此,我要寻找的是一种更新多行相关模型的方法(显然没有任何类型的循环)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-21 18:42:54

whereIn()和许多其他方法(如where()has()with()等)返回一个Builder实例,该实例允许您链接其他查询。不能访问ModelA实例方法,如生成器实例上的relatedModel()

您需要调用->get(),并迭代调用relatedModel()->update()的结果

代码语言:javascript
运行
复制
foreach(ModelA::whereIn('id', $data['ids'])->get() as $modelA) {
  $modelA->relatedModel()->update(['status_id' => 1]);
}

或者,如果您想要一个没有循环的单线行,则需要直接查询ModelB模型(或任何relatedModel() ):

代码语言:javascript
运行
复制
ModelB::whereIn('model_a_id', $data['ids'])->update(['status_id' => 1]);

注意:假设ModelB有一个model_a_id。如果没有,则可以使用whereHas()方法:

代码语言:javascript
运行
复制
ModelB::whereHas('modelA', function ($query) use ($data) {
  return $query->whereIn('model_a.id', $data['ids'];
})->update(['status_id' => 1]);

注:同样,对您的表/列名称做了一些假设;根据需要进行调整。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71561815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档