我正在使用Laravel 5.6和MySQL。我有categories
、sub_categories
、category_info
和services
。
一个category
可以有 1 个或多个sub_categories
。一个category
属于一个菜单类别
一个sub_category
只有一个category
。
一个category
有 1 条category
信息记录。无论是category
还是sub_category
,它都会在category_info表中有一条记录。
我的表结构如下
Menu_Categories
id
1,
2
类别
id, parent_category_id, menu_category_id
1, null, 1
2, null, 1
3, 1, null
4, 1, null
Category_Info
category_id, name
1, Legal Services
2, Misc
3, US Legal Services
4, Europe Legal Services
控制器
$cats = MenuCategories
::with(['categories', 'categories.info', 'categories.sub_categories'])
->get();
菜单类别模型
public function categories() {
return $this->hasMany(Categories::class, 'menu_category_id', 'id');
}
分类目录 模型
public function menu_categories() {
return $this->belongsTo(MenuCategories::class, 'menu_category_id');
}
public function sub_categories() {
return $this->hasOne(Categories::class, 'parent_category_id');
}
public function info() {
return $this->hasOne(CategoryInfo::class, 'category_id');
}
子类别信息模型
public function category() {
return $this->belongsTo(CategoryInfo::class);
}
我需要返回类别和类别信息,如下所示
{
Categories: {
{
id: 1,
parent_category_id, null,
Sub_Categories: {
{
id: 3
parent_category_id: 1
Category_Info: {
{
category_id: 3,
name: US Legal Services
}
}
},
{
id: 4
parent_category_id: 1,
Category_Info: {
{
category_id: 4,
name: Europe Legal Services
}
}
},
},
Category_Info: {
{
category_id: 3,
name: Legal Services
}
}
},
{
id: 2,
parent_category_id, null,
Category_Info: {
{
category_id: 3,
name: Misc
}
}
},
}
}
以我建立关系的方式,它返回的数据不正确。它不会为sub_categories
返回Category_Info.
{
Categories: {
{
id: 1,
parent_category_id, null,
Sub_Categories: {
{
id: 3
parent_category_id: 1
},
{
id: 4
parent_category_id: 1,
},
},
Category_Info: {
{
category_id: 3,
name: Legal Services
}
}
},
{
id: 2,
parent_category_id, null,
Category_Info: {
{
category_id: 3,
name: Misc
}
}
},
}
}
是否可以也为sub_categories
返回Category_Info?提前谢谢。
感谢Jonas Staudenmeir帮助我
$cats = MenuCategories
::with(['categories', 'categories.info', 'categories.sub_categories', 'categories.sub_categories.info'])
->get();