在Laravel多对多的Eloquent关系中获取相同类别的项目

时间:2016-06-06 17:43:39

标签: php mysql sql laravel eloquent

有一个类别和产品。

类别可以是“推荐”,“鞋子”,“衬衫”等..,产品可以是“耐克衬衫”,“阿迪达斯鞋”等。

Category
id
name

Product
id
name

CateogryProducts 
cat_id
product_id

我想从产品列表中获取下一个和上一个产品ID,但是,列表必须属于特定类别。

例如,如果我提供鞋子类别,那么获取鞋子列表,并根据产品ID,获得下一个鞋子和以前的鞋子产品ID。

$this->data['category'] = Category::find($cat);
$product = Product::find($id);
$this->data['prev'] = Product::where('id', '<', $product->id)->max('id');
$this->data['next'] = Product::where('id', '>', $product->id)->min('id');

这是我尝试获取下一个/上一个ID,有没有办法将列表限制为同一类别?

非常感谢

1 个答案:

答案 0 :(得分:1)

如果您已正确设置关系,则可以:

$prev = Product::with(['categories' => function($query){
      $query->where('id', $cat_id);
    }])->where('id', '<', $id)->orderBy('id', 'desc')->first();

$next = Product::with(['categories' => function($query){
      $query->where('cat_id', $cat_id);
    }])->where('id', '>', $id)->orderBy('id', 'asc')->first();

它没有经过测试,可能需要一些调整并以正确的方式调整asc / desc,但这是要走的路