如何在 Laravel Query Builder 中批量更新(编辑)?

How to Mass Update(Edit) in Laravel Query Builder?

大家好,我正在尝试使用复选框对我的应用程序进行批量更新,但是当我尝试更新时,它只会更新第一个学生 ID(我尝试 select 其他学生更新不会工作)。您能否提供一些我可以遵循的见解或具体示例?

这是我目前尝试过的方法

public function changeSched()
{
  
    DB::table('class_list')
        ->whereIn('id',  $this->selectedStudents)
        ->update(['section' => $this->selectedSched]);


}

对于我的复选框

@foreach($classlist as $stud)
                <tr>
                  <th class="bg-white py-5 px-5">
                    <div class="items-center">
                      
                      <input type="checkbox" wire:model="selectedStudents.{{ $stud->id }}"/>
                    </div>
                    </th>

我在您的更新语句中没有看到任何错误,因此它应该更新查询提供的所有记录(大量更新已记录 here)。

我猜错误是在你设置$this->selectedStudents之前。您确定此变量包含一个包含所有选定 ID 的简单数组(不是关联数组)吗?

您应该执行以下操作:

  • 调试 $this->selectedStudents 变量以确保其内容正确
  • 暂时用硬编码值替换它[1, 2, 3]以确保您的其余代码正常工作

更新

要将 $this->selectedStudents 转换为正确的格式,您可以执行以下操作:

$selectedIds = [];
foreach ($this->selectedStudents as $id => $isSelected){
    if ($isSelected) {
        $selectedIds[] = $id;
    }
}
DB::table('class_list')
        ->whereIn('id',  $selectedIds)
        ->update(['section' => $this->selectedSched]);