首页 > 解决方案 > 一次更新多行 Laravel Eloquent

问题描述

我有products具有以下结构的表。

id | name | promote

其中列promote是布尔类型。

我想将boolean列的值设置为1选定的行并设置0为非选定的行。我在控制器中有以下代码来处理此查询。

$yes = Tour::whereIn('id', $request->promote)->get();
$no = Tour::whereNotIn('id', $request->promote)->get();

foreach ($yes as $item) {
    $item->promote = 1;
    $item->save();
}

foreach ($no as $item) {
    $item->promote = 0;
    $item->save();
}

我从表单请求中得到关注。

在此处输入图像描述

上面的代码确实有效,但我认为它不是很有效。我正在寻找以更有效的方式实现结果的可选方法。

标签: laraveleloquentlaravel-6

解决方案


取而代之的是检索结果,循环遍历,可以直接更新,

$yes =  Tour::whereIn('id', $request->promote)->update(['promote' => 1]);
$no =  Tour::whereNotIn('id', $request->promote)->update(['promote' => 0]);

推荐阅读