首页 > 解决方案 > 如何在 Laravel Query Builder 中批量更新(编辑)?

问题描述

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

这是我迄今为止尝试过的

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>

标签: laravellaravel-livewire

解决方案


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

我猜错误是之前,当你设置$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]);

推荐阅读