Laravel 类别和子类别查询?
我正试图建立一个数据库,这样我就可以查询它,得到一个类别的所有产品,并查询一个特定的子类别 我有一张桌子Laravel 类别和子类别查询?,laravel,laravel-5,eloquent,laravel-5.1,Laravel,Laravel 5,Eloquent,Laravel 5.1,我正试图建立一个数据库,这样我就可以查询它,得到一个类别的所有产品,并查询一个特定的子类别 我有一张桌子 id | title | category_id (fk) 和类别表: id | title | parent 因此,如果类别如下所示: id | title | parent 1 | books | null 2 | crime | 1 3 | spy | 2 4 | dvd | null 5 | cd | null 和产品: id | title | cat
id | title | category_id (fk)
和类别表:
id | title | parent
因此,如果类别如下所示:
id | title | parent
1 | books | null
2 | crime | 1
3 | spy | 2
4 | dvd | null
5 | cd | null
和产品:
id | title | category_id (fk)
1 | 007 | 3
1 | Murder| 2
一个产品将属于一个类别。上述“007”产品属于“间谍”子类别“谋杀”属于“犯罪”子类别。两者都属于父“书籍”类别
我如何查询数据库以:
您只需找到父类别的所有子类别,然后使用该子类别获取关联的产品。下面的解决方案假设您所描述的每个表都有一个
类别
和一个产品
模型
产品
模型不需要任何额外的代码,它只需要存在。类别
模型必须如下所示:
namespace应用程序;
使用Illumb\Database\Elount\Model;
类类别扩展模型
{
公共功能产品()
{
//生成包含父类别ID和找到的所有子类别ID的数组
$categoryIds=array_merge([$this->id],$this->subcategoryIds());
//查找与检索到的类别ID匹配的所有产品
返回产品::其中('category_id',$categoryIds)->get();
}
受保护的函数子类别id($id=null,&$id=[]))
{
//如果未传递ID,请将当前模型ID设置为父项
如果(为空($id)){
$id=$this->id;
}
//查找子类别ID
$categoryIds=$this->query()->where('parent',$id)->list('id');
//将每个ID添加到列表中,并递归地查找其他子类别ID
foreach($categoryId作为$categoryId){
$ids[]=$categoryId;
$ids+=$this->subcategoryId($categoryId,$ids);
}
返回$id;
}
}
现在要查找图书
类别中的产品,您只需通过id
找到它,并调用模型上的products
方法:
$products=App\Category::find(1)->products();
参见或中的部分解决方案