У меня есть эта структура базы данных.
orders ====► order_items ====► order_item_meta
║ |
║ |
▼ ▼
order_meta products
Отношения - это заказы.Кроме того, order_items / product_id необходимо объединить с таблицей продуктов.
У меня есть order_id, и я пытаюсь получить все данные за один вызов.Но у меня странная проблема.Это текущий код:
$orders = Orders::
with([
'order_items' => function($q) { //#1
$q->leftJoin('products','order_items.product_id', '=', 'products.id');
}
])
->with(['order_items.orderitem_meta']) //#2
->with(['order_meta']); //#3
Кажется, что с # 1 и с # 2 мешают друг другу.
Case1: Если я делаю с # 1 + с # 3,Я могу видеть в результате данные из таблицы продуктов + данные из order_items, но не данные из order_item_meta.
Case2: если я делаю с # 2 + с # 3, я могусм. в результате данные из order_items + данные из order_item_meta, но не из таблицы продуктов.
В обоих случаях данные из # 3 в порядке.
Но если я сделаю все три вместе (с # 1 + с # 2 + с3), я получу те же результаты, что и case1.данные из order_item_meta отсутствуют.
Orders.php
class Orders extends Model
{
public function order_items()
{
return $this->hasMany('App\OrderItem','order_id','id'); //'foreign_key', 'local_key'
}
public function order_meta()
{
return $this->hasMany('App\OrderMeta','order_id','id'); //'foreign_key', 'local_key'
}
public function orderitem_meta()
{
return $this->hasManyThrough(
'App\OrderItem',
'App\OrderItemMeta',
'order_item_id', // Foreign key on order_itemmeta table...
'order_id', // Foreign key on order_item table...
'id', // Local key on order_item table...
'id' // Local key on order_itemmeta table...
);
}
}
OrderItem.php
class OrderItem extends Model
{
public function order()
{
return $this->belongsTo('App\Orders');
}
public function orderitem_meta()
{
return $this->hasMany('App\OrderItemMeta','order_item_id','id'); //'foreign_key', 'local_key'
}
}
OrderItemMeta.php
class OrderItemMeta extends Model
{
protected $table = 'order_itemmeta';
public function orderitem()
{
return $this->belongsTo('App\OrderItem');
}
}
Как правильно сделать этозапрос