laravel - 如何在 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>
解决方案
我在您的更新语句中没有看到任何错误,因此它应该更新查询提供的所有记录(此处记录了大量更新)。
我猜错误是之前,当你设置$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]);
推荐阅读
- java - Java中的引用类型和原始类型到底发生了什么
- java - 如何最好地在 selenium 中找到错误模式消息
- python - Python 线程,传递你刚刚创建的变量
- typescript - 在 Angular 9 的 Facebook 共享预览中显示某个网页的元数据
- c - 如何在 C 中每行打印 x 个整数?
- python - __init__ 文件在带有子模块的自定义 Python 模块中导入
- angular - CodeSandBox: Angular: ERROR TypeError: html2canvas_1.default 不是函数
- c - 用c写一个shell,关于($?)值的问题
- html - 如何在与html页面中另一个下拉列表中的数据相对应的下拉列表中显示数据?
- c - 就字节序而言,是否使用相同的掩码可移植 msb 和 lsb?