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

Php 在laravel中存储来自foreach循环的数组,php,laravel,Php,Laravel,我有一个为特定用户选择数据的函数,然后我想在销售表中插入/创建'sid',pid,qtyremain,qtysold,amountpaid 但是现在当我运行查询时,我得到了下面的错误 数组到字符串的转换 任何人都可以帮助纠正我做错的地方 我的窗体视图刀片 <tbody id="tby"> @foreach($search as $dt) <tr> <td><input type="text" value="{{$dt

我有一个为特定用户选择数据的函数,然后我想在销售表中插入/创建
'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>

@foreach($dt搜索)
@endforeach
我的控制器

    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');

        // }
     }
公共函数存储(请求$Request)
{
//开店。
请求()->验证([
“sid'=>“必需”,
“qtyremain”=>“必需”,
'amountpaid'=>'required',
]);
对于($i=1;$ipid);$i++)
{
$data[]=[
'sid'=>$request->sid,
“pid”=>$request->pid,
'qtyremain'=>$request->qtyremain,
“qtysold”=>$request->qtysold,
'AmountPayed'=>$request->AmountPayed,
];
//dd(数据);
}
销售:插入($数据);
return redirect()->back()->带有('success','Successfully Stored');
// }
}

您的
数据是一个数组。因此,您应该迭代并进行插入。所以你可以替换

Sale::insert($data);


您的
数据是一个数组。因此,您应该迭代并进行插入。所以你可以替换

Sale::insert($data);


您正在尝试插入多条记录。但是,您的请求结构如下所示:

[ 
  ["sid" => [ "1" ], 
   "pid" => ["6", "8", "5"], 
   "qtyremain" => ["2" , "2", "2"], 
   "qtysold" => ["18", "38", "53" ], 
   "amountpaid" => "33333" 
  ] 
]
发生错误的原因是,Laravel验证无法检查值为数组的字段。如果要检查数组的元素,需要使用
*
,执行以下操作:

[ 
  ["sid" => [ "1" ], 
   "pid" => ["6", "8", "5"], 
   "qtyremain" => ["2" , "2", "2"], 
   "qtysold" => ["18", "38", "53" ], 
   "amountpaid" => "33333" 
  ] 
]
request()->验证([
'sid.*'=>'必需',
'qtyremain.*'=>'必需',
'amountpaid'=>'required',
]);
但是,, 我建议您可以对输入名称使用
sell[$I][pid]
而不是
pid[]

因此,您不需要在后端按循环构造结构


@foreach($i=>$dt搜索)
@endforeach
因此,请求结构如下所示:

[ 
  ["sid" => [ "1" ], 
   "pid" => ["6", "8", "5"], 
   "qtyremain" => ["2" , "2", "2"], 
   "qtysold" => ["18", "38", "53" ], 
   "amountpaid" => "33333" 
  ] 
]
[“销售”=>[
[“pid”=>“1”、“sid”=>2、“qtyremain”=>12、“qtysold”=>22,“已支付金额”=>23.0],
[“pid”=>“2”,“sid”=>2,“qtyremain”=>15,“qtysold”=>25,“支付金额”=>25.0]
...
]]
验证此数组的字段并以更快、更清晰的方式插入这些字段:

$data=request()->验证([
'sale.*.sid'=>'required',
'sale.*.qtyremain'=>'required',
'amountpaid'=>'required',
...
]);
$sale=$data['sale'];
$array=collect($sale)->映射(函数($item)使用($data){
$item['amountpaid']=$data['amountpaid'];
返回$item;
})->全部();
销售:插入($数组);

您正在尝试插入多条记录。但是,您的请求结构如下所示:

[ 
  ["sid" => [ "1" ], 
   "pid" => ["6", "8", "5"], 
   "qtyremain" => ["2" , "2", "2"], 
   "qtysold" => ["18", "38", "53" ], 
   "amountpaid" => "33333" 
  ] 
]
发生错误的原因是,Laravel验证无法检查值为数组的字段。如果要检查数组的元素,需要使用
*
,执行以下操作:

[ 
  ["sid" => [ "1" ], 
   "pid" => ["6", "8", "5"], 
   "qtyremain" => ["2" , "2", "2"], 
   "qtysold" => ["18", "38", "53" ], 
   "amountpaid" => "33333" 
  ] 
]
request()->验证([
'sid.*'=>'必需',
'qtyremain.*'=>'必需',
'amountpaid'=>'required',
]);
但是,, 我建议您可以对输入名称使用
sell[$I][pid]
而不是
pid[]

因此,您不需要在后端按循环构造结构


@foreach($i=>$dt搜索)
@endforeach
因此,请求结构如下所示:

[ 
  ["sid" => [ "1" ], 
   "pid" => ["6", "8", "5"], 
   "qtyremain" => ["2" , "2", "2"], 
   "qtysold" => ["18", "38", "53" ], 
   "amountpaid" => "33333" 
  ] 
]
[“销售”=>[
[“pid”=>“1”、“sid”=>2、“qtyremain”=>12、“qtysold”=>22,“已支付金额”=>23.0],
[“pid”=>“2”,“sid”=>2,“qtyremain”=>15,“qtysold”=>25,“支付金额”=>25.0]
...
]]
验证此数组的字段并以更快、更清晰的方式插入这些字段:

$data=request()->验证([
'sale.*.sid'=>'required',
'sale.*.qtyremain'=>'required',
'amountpaid'=>'required',
...
]);
$sale=$data['sale'];
$array=collect($sale)->映射(函数($item)使用($data){
$item['amountpaid']=$data['amountpaid'];
返回$item;
})->全部();
销售:插入($数组);

错误来自验证。如何@TsaiKogaplz发布表单标签,或发布
$request->all()
sid、pid、qtyremain、qtysold、已付款金额
数组:1[▼   0=>数组:5[▼     “sid”=>数组:1[▼       0=>“1”]“pid”=>数组:3[▼       0=>“6”1=>“8”2=>“5”]“qtyremain”=>数组:3[▼       0=>“2”1=>“2”2=>“2”]“qtysold”=>数组:3[▼       0=>“18”1=>“38”2=>“53”]“amountpaid”=>“33333”]
错误消息“数组到字符串转换”来自PHP本身。它的基本意思是“我期望一个字符串,但我收到了一个数组”。您需要确保要发布的数据是
字符串
,而不是
数组
。查看您的标记(HTML),您正在使用数组符号命名字段。请从每个HTML标记中删除“[]”,然后重试。错误来自验证。如何@TsaiKogaplz发布表单标签,或发布
$request->all()
sid、pid、qtyremain、qtysold、已付款金额
数组:1[▼   0=>数组:5[▼     “sid”=>数组:1[▼       0=>“1”]“pid”=>数组:3[▼       0=>“6”1=>“8”2=>“5”]“qtyremain”=>数组:3[▼       0=>“2”1=>“2”2=>“2”]“qtysold”=>数组:3[▼       0=>“18”1=>“38”2=>“53”]“amountpaid”=>“33333”]
错误消息“数组到字符串转换”来自PHP本身。它基本上是说“我期待一个字符串,但我收到了