分类
id | title | parent_id
产品
id | title | category_id
类别表自联接以创建子类别:
id | title | parent_id
1 art 0
2 sport 0
3 brushes 1
4 paints 1
5 balls 2
产品属于一个类别,因此足球产品将属于球类别,这是运动的子类别。
我有产品和类别模型。
在类别模型上,我有一个hasManyThrough:
public function products()
{
return $this->hasManyThrough('Product', 'Category', 'parent_id', 'category_id');
}
我通过以下方式致电:
Category::with('products')->find($catId);
一切正常,我可以获得一个类别中的所有产品,当我需要获得子类别中的所有产品时,问题就出现了,所以使用数据:
id | title | category_id
1 blue paint 4
2 red paint 4
3 fine brush 3
并致电:
Category::with('products')->find(1); //get all art products
我得到蓝色油漆,红色油漆和细刷。
当我调用子类别时会出现问题:
Category::with('products')->find(4); //get all paints
我什么都没得到,我应该得到蓝色和红色的油漆。
我如何打电话给我解决这个问题,以便我可以获得父类或子类的所有产品?
答案 0 :(得分:0)
执行此操作的唯一方法是使用两种不同的关系:一种需要已经定义的hasManyThrough(),另一种是简单的hasMany():
public function subproducts()
{
return $this->hasMany('Product');
}
这就留下了必须添加一些" if($ category-> parent_id)"控制器中的块,以便正确调用products()和subproducts()...
或者你可以试着对你现有的产品()关系感到奇怪,并冒险在这个过程中打破一些更基本的Eloquent功能。事实上,它可能根本不起作用。也许是这样的:
public function products()
{
if ( $this->parent_id )
{
return $this->hasMany('Product');
}
else
{
return $this->hasManyThrough('Product', 'Category', 'parent_id', 'category_id');
}
}