Laravel 5.2 - 用一次查询更新多行

5

我经常进行很多计算,最后需要把结果保存到现有表格中的行中。

我拥有的数组将类似于以下内容:

[
    <model_id> => [
        'rate' => <some rate>
    ]
    <model_id_2> => [
        'rate' => <some other rate>
    ]
    .....
]

显然,我可以遍历这个数组,并对数组中的每个项目进行更新,但是这样可能会导致100次更新调用。是否有一种方法(通过Laravel的Eloquent或甚至是一个原始的SQL查询)可以通过一次调用完成所有这些更新?


很抱歉,您必须使用MySQL的“CASE”命令进行原始查询,例如请参考https://dev59.com/rHbZa4cB1Zd3GeqPCB_G - Joel Hinz
有没有可能写一个例子?表名是 pn_pensioner_member_yearly_summary....与 <model_id> 匹配的主键是 member_yearly_summary_id。我不会使用这个,因为这意味着要进行100个case检查的SQL查询....这似乎有点荒谬... - Bill Garrison
1
好的,在那个链接里有一个例子。我同意这最多是繁琐和不切实际的,但 MySQL 对于同时更新许多具有不同值的事物的支持并不是很好。据我所知,Eloquent 也是如此。 - Joel Hinz
2个回答

7
您可以尝试使用Eloquent的update()来更新多个记录。以下是我用于将多个记录更新到我的表中的一些代码。
\App\Notification::where('to_id', '=', 0)
                ->update(['is_read' => 1]); 

5
如果您担心请求所花费的时间,可以通过触发事件并将侦听器/作业加入队列进行处理,以便异步保存您的模型。有关示例,请访问Laravel Docs for Queues
据我所知,在Laravel中无法更新多个行。

我实际上将其设置为队列作业,它运行得相当快(100个记录小于一秒),所以我会这样做。谢谢! - Bill Garrison
只是为了通知大家:您可以使用@NikunjK的答案更新多行。 - user3494047
1
@user3494047 是的,您可以通过单个查询更新多条记录,但是使用相同的值。OP的问题是要通过一个查询更新具有不同值的多个记录。 - Nick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接