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”产品属于“间谍”子类别“谋杀”属于“犯罪”子类别。两者都属于父“书籍”类别

我如何查询数据库以:

  • 获取子类别的所有产品(例如,对于spy,我将获得“007”)

  • 获取父类别的所有产品,因此如果我想要所有书籍产品,我将同时获得“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();
    
    参见或中的部分解决方案