【问题标题】:How to bulk update records with foreach?如何使用 foreach 批量更新记录?
【发布时间】:2017-11-13 10:28:21
【问题描述】:

我有一个 foreach 循环来获取数据库上存储的值并显示它们中的每一个,它工作正常,但现在我想批量更新它的值,这是我生成复选框的代码。

@foreach ($servers as $server)

    <input type="checkbox" name="servidor[]" value="status_on" {{$server->status == 1 ? 'checked' : ''}}>

@endforeach

这是我更新数据库值的代码。

foreach (request('servidor') as $update) {

    DB::table('servers')
    ->where('id', $update)
    ->update(['status' => $update->servidor]);

}

它不起作用,我不断收到:

试图获取非对象的属性

在这条线上:-&gt;update(['status' =&gt; $update-&gt;servidor]);

如何批量更新这些动态生成的复选框?

【问题讨论】:

  • 您使用 $update 作为 id 以及您从中获取状态的对象,它是整数还是对象?

标签: php mysql sql laravel foreach


【解决方案1】:

如果你想获取 server_id=>value 数组,你应该将输入复选框更改为

<input type="checkbox" name="servidor[{{$server->id}}]" value="{{$server->status}}" {{$server->status == 1 ? 'checked' : ''}}><span></span>

所以你可以制作服务器 id->value 数组,然后使用 foreach($value as $key => $value) 你的问题就解决了。

【讨论】:

  • 你会得到一个 $key 作为服务器的 ID 和 $value 作为服务器的值。
  • 非常感谢,我搞定了,我的最终代码是这样的:pastebin.com/yvd0X4YV *
  • 你不客气 :) @Vinny
【解决方案2】:

打印出对象 $update as 的值

 print_r(update) or var_dump(update) to see the $update objects

然后将该行更改为

>update(['status' => $update->CORRECT-ITEM-FROM-ABOVE-PRINT-OUT]);

ps:回头看你上面的代码看起来逻辑是错误的。 您想将“服务器->状态”设置为“someValue”,并且在该循环中“someValue”是错误的。

->update(['status' => $update->servidor]);

【讨论】:

  • 我收到了这个Array ( [0] =&gt; 1 [1] =&gt; 1)
  • print_r($update[0] . "&lt;br&gt;"); 返回:1&lt;br&gt;1&lt;br&gt;
  • 我更新了答案,我没有看到该作业右侧的任何有意义的值。您希望将服务器状态设置为什么值?
  • 它必须设置为0或1,问题是表单为每个复选框只发送一个值,它应该将复选框值与服务器ID一起发送到同一个数组对象中。
  • 根据上面的打印输出 print_r($update[0] ) 返回 1。不确定这会返回什么 print_r($update[1]。检查一下
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 2021-11-21
  • 2021-12-13
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多