Ваше действие viewOrders
должно быть скрыто за процессом аутентификации (очевидно, пользователь должен сначала войти в систему, прежде чем он сможет просмотреть свои заказы).Как только вы это сделаете (используя промежуточное программное обеспечение auth
для своего маршрута), Laravel может разрешить для вас аутентифицированного пользователя - вы можете просто указать его как параметр вашего действия viewOrders
:
public function viewOrders(User $user)
{
$orders = $user->orders()->orderBy('id', 'desc')->get();
return view('orders')->with(compact('orders'));
}
Как вы заметилиЗдесь я немного изменил ваш запрос.Вместо выбора всех заказов мы теперь выбираем их через аутентифицированного пользователя с отношением к его заказам.Заказы, очевидно, принадлежат пользователю, но через продукты (как промежуточное звено) - у одного пользователя может быть много продуктов, у одного продукта может быть много заказов, таким образом, у одного пользователя может быть много заказов.В Laravel такого рода отношения между красноречивыми моделями называются HasManyThrough .Поэтому вы должны объявить это в вашей User
модели:
class User extends Model {
...
public function orders()
{
return $this->hasManyThrough(Order::class, Product::class);
}
}
Обратите внимание, что ваш Product
, вероятно, также будет иметь отношение orders()
, но вместо этого он будет иметь тип HasMany
, так как он является прямымодин без промежуточных звеньев.