У меня есть orders_products
таблица. Для отношений один ко многим. Один заказ может иметь несколько продуктов. И каждая лицензия уникальна для заказанного продукта. Потому что каждая лицензия генерируется уникально для данного продукта.
Таблица orders_products
имеет идентификатор заказа, идентификатор продукта и идентификатор лицензии. Это связано с тем, что все заказы имеют связанный продукт и соответствующую лицензию.
В модели Order
у меня есть следующие отношения:
class Order extends Model {
public function products()
{
return $this->belongsToMany(Product::class, 'orders_products', 'order_id', 'product_id');
}
public function licenses()
{
return $this->belongsToMany(License::class, 'orders_products', 'license_id');
}
}
Но теперь я бы хотел, чтобы лицензии отображались в объектах продукта. Потому что они связаны. Итак, каким-то образом эти отношения необходимо объединить?
При извлечении данных:
$data = Order::with('products', 'licenses')->get();
Результат неполный:
"data": [
{
"id": 1, <!-- id of the orders table
"user_id": "2",
"products": [
{
"id": 1,
"name": "Product 1",
"price": "100.0",
"license": null <-- here I would like to licenses relation to kick in
},
{
"id": 2,
"name": "Product 2",
"price": "100.0",
"license": null
}
],
"payed_at": "2020-02-21 17:07:49",
"payed": true
}
]
}
Как вы можете видеть, данные о товаре заполняются правильно. Но лицензии прилагаются отдельно. Но они должны быть частью продукта.
Так как объединить результаты столбцов product_id и license_id из таблицы order_products
таблицы?
Обновление:
Я думаю, что решение каким-то образом заключается в вызове license () для модели Product.
"products": [
{
"id": 1,
"name": "Developer Forms Plugin",
"price": "100.0",
"license": {
"id": null,
"license": null,
"slots": null
}
}]
Таков должен быть результат. Лицензия является уникальной для каждого заказанного продукта. Просто иметь лицензию на каждый продукт недостаточно. Они генерируются для каждого заказанного товара.