我目前有一个表单/视图,允许 User
保存 Order
. 这也会使用相应的 Product
和 qty
更新数据透视表 . 我想要做的是,在输入此信息并将其保存到数据库之后,我想将用户发送到一个结帐页面,该页面显示他们输入的所有信息 Order
.
Relationships
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
函数传递数据而没有这个额外的查询? (我理解在Sessions中移动数据,但我正在使用数据透视表,这使事情复杂化 .
1 回答
如果在结帐页面上,您只想使用用户所做的最新订单,那么您只需使用route model binding加载该订单
然后在你的控制器中:
所以,从这里,您可以将此订单传递给视图,并列出此订单中的所有产品,并且在您的
Order
模型中,您应该引用此订单所属的用户:从数据透视表中访问列将是: