繁体   English   中英

在 laravel 中存储来自 foreach 循环的数组

[英]store array from foreach loop in laravel

我有 function 这是 select 特定用户的数据,然后我想插入/创建'sid', pid,qtyremain, qtysold, amountpaid到销售表中。

但是现在当我运行查询时,我得到下面的错误

数组到字符串的转换

任何人都可以帮助纠正我做错的地方

我的表单视图刀片

    <tbody id="tby">
    @foreach($search as $dt)

    <tr>
      <td><input type="text" value="{{$dt->items->name}}" readonly="" class="form-control"><input type="hidden" value="{{$dt->items->id}}" name="pid[]"></td>
      <td><input  name="sprice[]" value="{{$dt->items->Sprice}}" readonly="" class="form-control sprice"> </td>
      <td><input type="text" name="qtyload[]"  value="{{$dt->qty}}" readonly="" class="form-control qtyload"></td>
      <td><input type="text" name="qtyremain[]"   class="form-control qtyremain"></td>
      <td><input type="text" name="qtysold[]"   readonly="" class="form-control qtysold"></td>
      <td><input type="text" name="amount[]"   readonly="" class="form-control amount"></td>
    </tr>
    @endforeach
  </tbody>

我的 controller

    public function store(Request $request)
  {

   //Start Store.
       request()->validate([
        'sid' => 'required',
        'qtyremain' => 'required',
        'amountpaid' => 'required',

         ]);
      for ($i = 1; $i < count($request->pid); $i++) 
          {
                $data[] =[
               'sid'=>$request->sid,
                'pid'=>$request->pid,
                'qtyremain'=>$request->qtyremain,
                'qtysold'=>$request->qtysold ,
                'amountpaid'=>$request->amountpaid,
                ];
    // dd($data);  
      }
                Sale::insert($data);

        return redirect()->back()->with('success', 'Successfully Stored');

        // }
     }

您的data是一个数组。 所以你应该迭代并进行插入。 所以你可以更换

Sale::insert($data);

foreach ($data as $record){
    Sale::insert($record);
}

您正在尝试插入多条记录。 但是,您的请求结构是这样的:

[ 
  ["sid" => [ "1" ], 
   "pid" => ["6", "8", "5"], 
   "qtyremain" => ["2" , "2", "2"], 
   "qtysold" => ["18", "38", "53" ], 
   "amountpaid" => "33333" 
  ] 
]

并且发生错误是因为 Laravel 验证无法检查值是数组的字段。 如果要检查数组的元素,则需要使用* ,执行以下操作:

request()->validate([
    'sid.*' => 'required',
    'qtyremain.*' => 'required',
    'amountpaid' => 'required',
]);

但是,我建议您可以使用sell[$i][pid]而不是pid[]来输入名称。

所以你不需要在后端循环构建结构。

    <tbody id="tby">
    @foreach($search as $i => $dt)
    <tr>
      <td><input type="text" value="{{$dt->items->name}}" readonly="" class="form-control"><input type="hidden" value="{{$dt->items->id}}" name="sale[$i][pid]"></td>
      <td><input  name="sale[$i][sprice]" value="{{$dt->items->Sprice}}" readonly="" class="form-control sprice"> </td>
      <td><input type="text" name="sale[$i][qtyload]"  value="{{$dt->qty}}" readonly="" class="form-control qtyload"></td>
      <td><input type="text" name="sale[$i][qtyremain]"   class="form-control qtyremain"></td>
      <td><input type="text" name="sale[$i][qtysold]"   readonly="" class="form-control qtysold"></td>
      <td><input type="text" name="sale[$i][amount]"   readonly="" class="form-control amount"></td>
    </tr>
    @endforeach
  </tbody>

所以请求结构会是这样的:

["sale" =>[
  ["pid" => "1", "sid" => 2, "qtyremain" => 12, "qtysold" => 22, 'amountpaid' => 23.0],
  ["pid" => "2", "sid" => 2, "qtyremain" => 15, "qtysold" => 25, 'amountpaid' => 25.0]
  ...
]]

验证该数组的字段并以更快、更简洁的方式插入它们:

$data = request()->validate([
   'sale.*.sid' => 'required',
   'sale.*.qtyremain' => 'required',
   'amountpaid' => 'required',
   ...
]);

$sale = $data['sale'];
$array = collect($sale)->map(function($item) use ($data) { 
    $item['amountpaid'] = $data['amountpaid']; 
    return $item; 
})->all();
Sale::insert($array);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM