【问题标题】:How to Mass Update(Edit) in Laravel Query Builder?如何在 Laravel Query Builder 中批量更新(编辑)?
【发布时间】:2021-12-15 02:37:04
【问题描述】:

大家好,我正在尝试使用复选框对我的应用程序进行大规模更新,但是当我尝试更新时,它只会更新第一个学生 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>

【问题讨论】:

    标签: laravel laravel-livewire


    【解决方案1】:

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

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

    您应该执行以下操作:

    • 调试$this-&gt;selectedStudents 变量以确保其内容正确
    • 暂时将其替换为硬编码值 [1, 2, 3],以确保其余代码正常工作

    更新

    要以正确的格式转换$this-&gt;selectedStudents,您可以执行以下操作:

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

    【讨论】:

    • 所以我尝试 dd() selectedStudents 它返回一个从 0=>false 1=>false 开始的数组。
    • 所以它确认 selectedStudents var 的格式不符合 whereIn 方法所期望的格式。您必须将变量转换为仅包含所选 id 作为值而不是键的数组。
    • selectedStudents 变量在我的代码中只使用了两次。
    • 你能告诉我怎么做吗?我对 laravel 很陌生。
    • 我用两种格式之间的转换更新了我的答案。
    猜你喜欢
    • 2015-10-02
    • 2014-07-15
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多