我有一张orders_products桌。一对多的关系。一个订单可以有多个产品。每个许可证都是定购产品独有的。因为每个许可证都是为给定的产品唯一生成的。
orders_products表有一个订单ID、一个product_id和一个license_id。这是因为所有的订单都有相关的产品和相关的许可证。

在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表中合并呢?
更新:
我认为解决方案在某种程度上在于调用Product上的license()。
"products": [
{
"id": 1,
"name": "Developer Forms Plugin",
"price": "100.0",
"license": {
"id": null,
"license": null,
"slots": null
}
}]输出应该是怎样的。该许可证对于每个订购的产品都是唯一的。仅仅拥有每一种产品的许可证是不够的。它们是为每一个订购的产品生成的。
发布于 2020-02-21 18:10:01
我想你需要这样的东西:
$data = Order::with('products.license')->get();这样我们就可以获得与产品相关的许可证。我打电话给license是因为您描述了它们之间的一对一关系,所以我假设您是用单数编写的。
https://stackoverflow.com/questions/60344025
复制相似问题