首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指向一个表的两个关系的Laravel合并结果

指向一个表的两个关系的Laravel合并结果
EN

Stack Overflow用户
提问于 2020-02-21 17:59:13
回答 1查看 131关注 0票数 2

我有一张orders_products桌。一对多的关系。一个订单可以有多个产品。每个许可证都是定购产品独有的。因为每个许可证都是为给定的产品唯一生成的。

orders_products表有一个订单ID、一个product_id和一个license_id。这是因为所有的订单都有相关的产品和相关的许可证。

Order模型中,我有以下关系:

代码语言:javascript
复制
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');
}
}

但是现在我想让许可证出现在产品对象中。因为他们是亲戚。所以这些关系需要合并吗?

检索数据时:

代码语言:javascript
复制
$data = Order::with('products', 'licenses')->get();

结果是不完整的:

代码语言:javascript
复制
"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()。

代码语言:javascript
复制
"products": [
            {
                "id": 1,
                "name": "Developer Forms Plugin",
                "price": "100.0",
                "license": {
                    "id": null,
                    "license": null,
                    "slots": null
                }
            }]

输出应该是怎样的。该许可证对于每个订购的产品都是唯一的。仅仅拥有每一种产品的许可证是不够的。它们是为每一个订购的产品生成的。

EN

回答 1

Stack Overflow用户

发布于 2020-02-21 18:10:01

我想你需要这样的东西:

代码语言:javascript
复制
$data = Order::with('products.license')->get();

这样我们就可以获得与产品相关的许可证。我打电话给license是因为您描述了它们之间的一对一关系,所以我假设您是用单数编写的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60344025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档