Laravel-用单行信息填充视图(包含数据透视图)

时间:2018-12-08 21:05:23

标签: laravel laravel-5 eloquent

我目前有一个表单/视图,该表单/视图允许User保存Order。这还将使用各自的Productqty更新数据透视表。我要做的是,在输入此信息并将其保存到数据库之后,我想将用户带到一个结帐页面,该页面显示他们为该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中移动数据的知识,但是我正在使用数据透视表,这使事情变得复杂。

1 个答案:

答案 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