Получить данные с 2 таблиц
Имеется 2 таблицы "Товары" и "Заказы" некоторые поля имеют одинаковые названия. Можно ли получить данные из 2 таблиц в 1 запросе чтобы все поля были (даже те которые одинаковые)?
Мой вариант получает все поля, но те которые одинаковые он получает со 2 таблицы (затирая первую).
$items = self::leftJoin('orders', 'items.id', '=', 'orders.item_id')->get();
Items
id
name
city_id
area_id
party
weight
data
status
created_at
updated_at
Orders
id
user_id
city_id
area_id
item_id
from
data
status
payment_system
payment_message
message
complete
delete
created_at
updated_at
Суть такова, что нужно получать все записи с таблицы Items, кроме тех, что имеют в таблице Orders тот же item_id и status = 'payment_wait' или status = 'payment_ok'
P.S. Цель - получать список товаров кроме тех, которые забронированы.
Ответы (1 шт):
class Item extends Model{
// получаем все заказы на данный товар
public function orders(){
return $this->hasMany(Order::class);
}
}
class Order extends Model {
// получаем товар по заказу
public function item(){
return $this->belongsTo(Item::class);
}
}
Таким способом устанавливается связь между таблицами в Laravel.
Получить товары с их заказам:
Item::with("orders")->get();
Чтобы указать статус товаров которые не должны войти в список:
Item::with("orders")->where("status", "!=", "Тут значение статуса")->get();
Чтобы получить все товары которые не имеют ни одного заказа в таблице "orders"
Item::doesntHave("orders")->get();