我有2个型号:ProductCarousel。他们两个都建立了Many To Many关系。

我有一个pivotcarousel_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 = 2carousel_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_id27

我想要该特定carousel_id的所有产品,并仅在该视图中显示该轮播。

附言:所有值都来自数据库。

我该如何实现?

最佳答案

GROUP BY是一个聚合函数。您描述的行为(如果确切地说应该如何工作)-将具有相同cp.carousel_id的所有行合并为一个,并允许您针对集合执行汇总函数,例如MAXSUMAVG等。


  现在,我要检索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/

10-09 07:06