首页 文章

Laravel - 使用单行信息(带有透视数据)填充视图

提问于
浏览
0

我目前有一个表单/视图,允许 User 保存 Order . 这也会使用相应的 Productqty 更新数据透视表 . 我想要做的是,在输入此信息并将其保存到数据库之后,我想将用户发送到一个结帐页面,该页面显示他们输入的所有信息 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 回答

  • 1

    如果在结帐页面上,您只想使用用户所做的最新订单,那么您只需使用route model binding加载该订单

    Route::get('checkout/{order}', 'OrdersController@checkout');
    

    然后在你的控制器中:

    public function checkout(Order $order)
    

    所以,从这里,您可以将此订单传递给视图,并列出此订单中的所有产品,并且在您的 Order 模型中,您应该引用此订单所属的用户:

    public function user()
    {
        return $this->belongsTo(User::class);
    }
    

    从数据透视表中访问列将是:

    @foreach($order->products as $product)
        <div> {{ $product->pivot->column }} </div>
    @endforeach
    

相关问题