所以我刚学会了如何利用嵌套迭代从数据透视表加载数据 . 现在我正在尝试保存数据,但我无法做到 .
我有一个“新”刀片,客户可以用许多“产品”创建一个新的“订单” .
刀片基本上只是遍历所有可用的 Product
. (据我所知,这就是刀片需要设置的方式)
new.blade.php
{!! Form::open(['url' => '/orders/store']) !!}
@foreach ($products as $product)
<h1>{{ $product->name }}</h1>
<p>{{ $product->description }}</p>
{{ Form::text('qty', null }}
@endforeach
所以这是我尝试利用嵌套迭代将'qty'数据传递给数据透视表 .
OrderController.php
public function store(Request $request)
{
$user = Auth::user();
$user->load("orders.products"); //eager load pivot table
/*NEW ORDER*/
$order = new Order;
$order->user_id = Auth::user()->id;
$order->save();
$product_id_array = [];
/*PIVOT*/
$products_to_sync_ids = [ 1,2,3,4,5,6,7,8,9 ];
$sync_data = [];
for ($i = 0; $i < count($products_to_sync_ids); $i++) {
$qty = $request->input('qty');
$sync_data[$products_to_sync_ids[$i]] = ['qty' => $qty];
}
$order->products()->sync($sync_data);
'Order'保存,但是qty始终默认为最后 Product
输入的数量 .
1 回答
您正在多次定义具有相同名称“qty”的文本输入,这就是为什么当您提交表单时,它将为您提供名称为“qty”的最后一个文本字段的值 .
在这种情况下,您应该将qty字段定义为类似的数组:
在获取其值时,您需要迭代它:
这可以帮助您实现您想要的 .