如何在 Laravel 中使用 pivot table 获取关系
How to get relations using pivot table in Laravel
我有 4 个 table 与此类似:
项目 (id)
子类别 (id | category_id)
item_subcategory (item_id | subcategory_id) --pivot table
类别 (id)
项目和子类别以多对多关系连接到枢轴 table。如何获取每个类别下的所有项目?下面是一个例子。
- 类别 1
- 项目 1
- 项目 2
- 项目 3
- 类别 2
- 项目 4
- 项目 5
- 类别 3
- 项目 2
- 项目 3
我不太明白,但也许这对你来说是一个解决方案,在你的模型中
public function Categories()
{
return $this->hasMany(Category::class,'id', 'categoryID');
}
从我的角度来看,我们可以使用 3 种方法,我将全部分享。
- 链接关系:您可以在其他关系之上link关系,例如
Category::with(['subcategories' => function ($query) {
$query->whereHas('items');
}])->get();
它将首先获取所有子类别,然后是类似的相关项目=>
[{
"id": 1,
"title": "Category 1",
"subcategories": [{
"id": 1,
"category_id": 1,
"title": "Subcategory 1",
"items": [{
"id": 1,
"title": "Item 1",
"pivot": {
"subcategory_id": 1,
"item_id": 1
}
}]
}]
}]
- 将类别 ID 添加到数据透视表 table 并建立新关系,例如:
public function items()
{
return $this->belongsToMany(Item::class, ItemSubcategory::class);
}
它将允许您直接获取产品而无需先加载子类别,诸如此类。
[{
"id": 1,
"title": "Category 1",
"items": [{
"id": 1,
"title": "Item 1",
"pivot": {
"category_id": 1,
"item_id": 1
}
}]
}]
- 使用 hasManyThrough,如果您的项目 table 包含子类别 ID,您可以通过依赖其他 类 创建关系。
public function items()
{
return $this->hasManyThrough(Item::class, ItemSubcategory::class, null, 'id', null, 'item_id');
}
我有 4 个 table 与此类似:
项目 (id)
子类别 (id | category_id)
item_subcategory (item_id | subcategory_id) --pivot table
类别 (id)
项目和子类别以多对多关系连接到枢轴 table。如何获取每个类别下的所有项目?下面是一个例子。
- 类别 1
- 项目 1
- 项目 2
- 项目 3
- 类别 2
- 项目 4
- 项目 5
- 类别 3
- 项目 2
- 项目 3
我不太明白,但也许这对你来说是一个解决方案,在你的模型中
public function Categories()
{
return $this->hasMany(Category::class,'id', 'categoryID');
}
从我的角度来看,我们可以使用 3 种方法,我将全部分享。
- 链接关系:您可以在其他关系之上link关系,例如
Category::with(['subcategories' => function ($query) {
$query->whereHas('items');
}])->get();
它将首先获取所有子类别,然后是类似的相关项目=>
[{
"id": 1,
"title": "Category 1",
"subcategories": [{
"id": 1,
"category_id": 1,
"title": "Subcategory 1",
"items": [{
"id": 1,
"title": "Item 1",
"pivot": {
"subcategory_id": 1,
"item_id": 1
}
}]
}]
}]
- 将类别 ID 添加到数据透视表 table 并建立新关系,例如:
public function items()
{
return $this->belongsToMany(Item::class, ItemSubcategory::class);
}
它将允许您直接获取产品而无需先加载子类别,诸如此类。
[{
"id": 1,
"title": "Category 1",
"items": [{
"id": 1,
"title": "Item 1",
"pivot": {
"category_id": 1,
"item_id": 1
}
}]
}]
- 使用 hasManyThrough,如果您的项目 table 包含子类别 ID,您可以通过依赖其他 类 创建关系。
public function items()
{
return $this->hasManyThrough(Item::class, ItemSubcategory::class, null, 'id', null, 'item_id');
}