Php 具有关系列的Laravel数据透视表分组

Php 具有关系列的Laravel数据透视表分组,php,json,laravel,Php,Json,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'); } { "i

型号项目:

public function addons()
{
    return $this->belongsToMany(Addon::class);
}
public function items()
{
    return $this->belongsToMany(Item::class);
}
public function addons()
{
    return $this->hasMany('App\Addon');
}
{
    "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();
{
    "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"
        }
    }]
}
型号插件:

public function addons()
{
    return $this->belongsToMany(Addon::class);
}
public function items()
{
    return $this->belongsToMany(Item::class);
}
public function addons()
{
    return $this->hasMany('App\Addon');
}
{
    "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();
{
    "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"
        }
    }]
}
型号附加类别:

public function addons()
{
    return $this->belongsToMany(Addon::class);
}
public function items()
{
    return $this->belongsToMany(Item::class);
}
public function addons()
{
    return $this->hasMany('App\Addon');
}
{
    "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();
{
    "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"
        }
    }]
}
我有一个数据透视表
addon\u item
(包含列id、addon\u id和item\u id)

我正在努力实现的目标: 项目集合,包含按AddonCategories分组的所有Addon

类似这样的内容:

public function addons()
{
    return $this->belongsToMany(Addon::class);
}
public function items()
{
    return $this->belongsToMany(Item::class);
}
public function addons()
{
    return $this->hasMany('App\Addon');
}
{
    "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();
{
    "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"
        }
    }]
}
到目前为止我所尝试的:

public function addons()
{
    return $this->belongsToMany(Addon::class);
}
public function items()
{
    return $this->belongsToMany(Item::class);
}
public function addons()
{
    return $this->hasMany('App\Addon');
}
{
    "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();
{
    "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"
        }
    }]
}
(我在addons.addon_类别中尝试了闭包函数和$query->groupBy,但没有成功-可能是因为我的方法不正确) 我用上述代码得到的输出:

public function addons()
{
    return $this->belongsToMany(Addon::class);
}
public function items()
{
    return $this->belongsToMany(Item::class);
}
public function addons()
{
    return $this->hasMany('App\Addon');
}
{
    "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();
{
    "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"
        }
    }]
}