首页 > 解决方案 > Laravel 数据透视表与关系列分组

问题描述

型号项目:

public function addons()
{
    return $this->belongsToMany(Addon::class);
}

模型插件:

public function items()
{
    return $this->belongsToMany(Item::class);
}

模型插件类别:

public function addons()
{
    return $this->hasMany('App\Addon');
}

我有一个数据透视表addon_item(包含 id、addon_id 和 item_id 列)

我想要实现的目标: 包含按 AddonCategories 分组的所有插件的项目集合

像这样的东西:

{
    "id": "1",
    "name": "Item 1",
    "addon_categories": [{
        "id": 1,
        "name": "Addon Category 1",
        "addons": [{
            "id": 1,
            "name": "Addon 1"
        }, {
            "id": 2,
            "name": "Addon 2"
        }]
    }]
}

到目前为止我已经尝试过:

$items = Item::with('addons.addon_category')
              ->with(array('addons' => function ($query) {
                  $query->where('is_active', 1);
              }))
              ->get();

(我在 addons.addon_category 中尝试了闭包函数和 $query->groupBy - 没用 - 可能是因为我的方法不正确) 我用上面的代码得到的输出:

{
    "id": "1",
    "name": "Item 1",
    "addons": [{
        "id": "1",
        "name": "Addon 1",
        "addon_category_id": "1",
        "pivot": {
            "item_id": "1",
            "addon_id": "1"
        },
        "addon_category": {
            "id": "1",
            "name": "Addon Category 1"
        }
    }, {
        "id": "2",
        "name": "Addon 2",
        "addon_category_id": "1",
        "pivot": {
            "item_id": "1",
            "addon_id": "2"
        },
        "addon_category": {
            "id": "1",
            "name": "Addon Category 1"
        }
    }]
}

标签: phpjsonlaravel

解决方案


推荐阅读