我有 2 个模型:Product
和 Carousel
。它们都建立了多对多
关系。
我有一个pivot
表carousel_product
。
在数据透视表中,我有很少的数据,如下所示:
id carousel_id product_id created_at updated_at
1 2 2 -- --
2 2 3 -- --
3 2 4 -- --
4 2 5 -- --
5 2 6 -- --
6 3 7 -- --
7 3 8 -- --
8 3 9 -- --
9 3 10 -- --
10 3 11 -- --
现在我想检索 carousel_id = 2
和 carousel_id = 3
中的所有产品
为此,我在 Controller 中使用查询生成器:
public function index()
{
$carousels = Carousel::where('display', 'Enabled')->get();
$products = DB::table('carousel_product AS cp')
->join('products AS p', 'p.id', '=', 'cp.product_id')
->join('carousels AS c', 'c.id', '=', 'cp.carousel_id')
->select(
'p.id AS prod_id',
'p.name AS prod_name',
'p.code AS prod_code',
'p.short_description AS prod_short_desc',
'p.price AS prod_price',
'p.discount_price AS prod_disc_price'
)->groupBy('cp.carousel_id')->get();
dd( $products );
return view( 'home', compact( 'carousels', 'products' ) );
}
dd( $products )
的输出是 2
和 7
的 product_id
我想要该特定 carousel_id
的所有产品,并仅在该轮播的 View 中显示它。
P.S.:所有值均来自数据库。
我怎样才能实现这个目标?
最佳答案
GROUP BY
是一个聚合函数。您描述的行为是否准确地应该如何工作 - 它将具有相同 cp.carousel_id
的所有行合并为一个,并允许您执行诸如 MAX
、 之类的聚合函数>SUM
、AVG
等针对集合。
Now I want to retrieve all the products that are in carousel_id = 2 and carousel_id = 3
您需要 whereIn('carousel_id', [2, 3])
来实现这一点。
关于php - groupBy 仅返回 QueryBuilder laravel 5 中该特定 id 的 1 个结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30785189/