您的viewOrders
操作应该隐藏在身份验证过程之后(显然,用户必须先登录才能查看他的订单)。一旦你这样做了(使用auth
中间件作为它的路由),Laravel 可以为你解析经过身份验证的用户 - 你可以简单地将它作为你viewOrders
操作的参数提示:
public function viewOrders(User $user)
{
$orders = $user->orders()->orderBy('id', 'desc')->get();
return view('orders')->with(compact('orders'));
}
如您所见,我在这里稍微修改了您的查询。我们现在不是选择所有订单,而是通过经过身份验证的用户与其订单的关系来选择它们。订单明明是属于用户的,但是通过产品(作为中介)——一个用户可以有很多产品,一个产品可以有很多订单,因此一个用户可以有很多订单。在 Laravel 中,这种 eloquent 模型之间的关系称为HasManyThrough。因此,您应该在User
模型中声明它:
class User extends Model {
...
public function orders()
{
return $this->hasManyThrough(Order::class, Product::class);
}
}
请注意,您Product
可能也有orders()
关系,但它将是HasMany
类型,因为它是没有任何中间体的直接关系。