Мне нужна помощь с отношениями Laravel 5.4.
У меня есть 4 таблицы:
пользователи (поля: id, имя и т. д.)
профили (поля: id, user_id, first_name, last_name)
заказы (поля: id, user_id и т. д.) order_items (поля: id, order_id, product_id и т. д.)
Пользователь может иметь один профиль
Профиль может иметь одного пользователя
Пользователь может иметь много заказов
Заказ у одного пользователя
В заказе может быть много позиций
В моделях у меня есть:
Пользователь:
public function profile()
{
return $this->hasOne('App\Profile');
}
public function orders()
{
return $this->hasMany('App\Order');
}
Профиль:
public function user()
{
return $this->belongsTo('App\User');
}
Порядок:
public function user()
{
return $this->hasOne('App\User');
}
public function order_items()
{
return $this->hasMany('App\OrderItem');
}
заказЭлемент:
public function order()
{
return $this->belongsTo('App\Order');
}
public function product()
{
return $this->hasOne('App\Product');
}
У меня есть два вопроса:
1. Когда я показываю заказ, я хочу показать столбцы first_name и last_name из таблицы profiles.
В своем контроллере я сделал так: $user = User::find($order->user_id);
На мой взгляд: {{ $user->profile->fullName() }}
Есть ли способ получить имя непосредственно в представлении, а не сначала извлекать пользователя в контроллере?
2.
В моей модели заказа:
Когда я просматриваю заказ, я хочу отобразить все элементы заказа и название продукта (продукт- > имя) для каждого элемента.
Я очень запутался и не знаю, как это сделать.
В моем контроллере я пробовал: 1.
$items = Order::find($order->id)->order_items->with('product');
Получил ошибку: Попытка получить свойство не-объекта
2. $items = Order::find($order->id)->order_items;
foreach($items as $item) {
echo $item->product->name;
}
Получил ошибку:
SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец «products.order_item_id» в «предложении where» (SQL: выберите * из products
, где products
.order_item_id
= 1 и products
.order_item_id
не является нулевым пределом 1)