laravel如何批量更新数据?

laravel如何批量更新数据?总不能嵌套在循环里吧,循环都是要find()查询,比较耗资源

JellyBool

具体的需求可以说一下么?如果只是说批量更新,通常使用 insert 方法。

liushaoxing 回复 JellyBool

insert 是批量更新,网站有一个带所用标签文章的数量字段count,每次文章使用某个标签时,count字段+1,目前我是用find()查找对应id模型后修改值。因为标签是多选的,目前是嵌套在循环里面,想问一下有没有更好的方法

JellyBool 回复 liushaoxing

如果没理解错的话,应该不用 foreach 的,你把相关代码贴上来,看看能不能改善一下

raul07 回复 JellyBool

321654

raul07 回复 liushaoxing

123456

天山网艾克 回复 JellyBool

比如说,我想通过一个laravel函数修改 id 为 1,3,5,8,9等稿件的status值改成1 。
我现在通过循环了处理了

public function publish(Request $request){

        foreach ($request->get('itemList') as $item){
            Article::find($item)->update(['status'=>1]);
        }
    }
JellyBool 回复 天山网艾克

你这个可以直接 whereIn 试试:

Article::whereIn('id', $request->get('itemList'))->update(['status' => 1]);

这个理论上可以替换你的 foreach 了

天山网艾克 回复 JellyBool

谢谢,果然可以用。
我之前写

Article::find($request->get('itemList'))->update(['status'=>1]);

没有成功,还以为不让批量修改

liushaoxing 回复 JellyBool

差不多就是上面这个例子,不过如果这个例子是改成status的基础上再加1,那是不是要这样写[‘status’ => ‘status+1’]

天山网艾克 回复 JellyBool

然后 $request->get(‘itemList’) 来的是数组1,3,5,8,9

hebo5485

请问如果是将ID为1,3,5,8,9的稿件的status分别修改成不同的值怎么处理呢

raul07

123456

raul07

654321