我有2个型号:Product
和Carousel
。他们两个都建立了Many To Many
关系。
我有一个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
中的所有产品为此,我在控制器中使用查询生成器:
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 )
的输出是product_id
和2
的7
我想要该特定
carousel_id
的所有产品,并仅在该视图中显示该轮播。附言:所有值都来自数据库。
我该如何实现?
最佳答案
GROUP BY
是一个聚合函数。您描述的行为(如果确切地说应该如何工作)-将具有相同cp.carousel_id
的所有行合并为一个,并允许您针对集合执行汇总函数,例如MAX
,SUM
,AVG
等。
现在,我要检索carousel_id = 2和carousel_id = 3中的所有产品
您需要whereIn('carousel_id', [2, 3])
。
关于php - groupBy在QueryBuilder laravel 5中仅返回1个具有特定ID的结果集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30785189/