有一个类别和产品。
类别可以是“推荐”,“鞋子”,“衬衫”等..,产品可以是“耐克衬衫”,“阿迪达斯鞋”等。
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,有没有办法将列表限制为同一类别?
非常感谢
答案 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,但这是要走的路