我目前有一个表单/视图,该表单/视图允许User
保存Order
。这还将使用各自的Product
和qty
更新数据透视表。我要做的是,在输入此信息并将其保存到数据库之后,我想将用户带到一个结帐页面,该页面显示他们为该Order
输入的所有信息。
关系
User hasMany Order
Order belongsToMany Product
Product belongsToMany Order
checkout.blade.php
@foreach ($orders as $order)
@foreach ($order->products as $product)
<tr>
<td>{{ $product->name }}</td>
<td>{{ $product->pivot->qty }}</td>
</tr>
@endforeach
@endforeach
OrderController.php
public function checkout($id)
{
$user = Auth::user();
$user->load("orders.products"); //eager load pivot table
$orders = $user->orders->where('order_id', $id);
return view('orders.checkout', compact('orders', 'user'));
}
我知道我打错订单了,因为如果我更改
$orders = $user->orders->where('order_id', $id);
到
$orders = $user->orders;
它显示正确,当然,它会填充每个Order
的详细信息。
或者我是否可以通过某种优雅的方式从checkout
函数传递数据而无需进行此附加查询? (我了解在Session中移动数据的知识,但是我正在使用数据透视表,这使事情变得复杂。
答案 0 :(得分:1)
如果在结帐页面上,您只想使用用户下的最新订单,则可以使用route model binding
加载该订单。Route::get('checkout/{order}', 'OrdersController@checkout');
然后在您的控制器中:
public function checkout(Order $order)
因此,从这里开始,您可以将此订单传递到视图,并列出该订单中的所有产品,并且在您的Order
模型中,您还应参考该订单所属的用户:< / p>
public function user()
{
return $this->belongsTo(User::class);
}
从数据透视表访问列将是:
@foreach($order->products as $product)
<div> {{ $product->pivot->column }} </div>
@endforeach