如何将动态字段和DB :: raw与Laravel的流畅查询构建器结合起来?

时间:2015-03-31 20:56:45

标签: mysql laravel eloquent fluent

这是我想要的SQL:

SELECT 
    p.id , p.title , p.msrp , i.files
    , p.cost
FROM 
    `products` p
    LEFT JOIN ( 
        SELECT 
            GROUP_CONCAT( `images`.`filename` SEPARATOR ',' ) AS files , `product_id` 
        FROM 
            `images` 
        GROUP BY 
            `product_id` 
    ) i ON i.product_id = p.id

以下是使用Laravel的流畅查询构建器的查询:

$products = DB::table( 'products as p' )
    ->where( 'p.active' , '=' , 1 )
    ->select( $fields )
    ->get();

$fields变量是一个基于用户是否登录的字段数组:

$fields = array( 'p.id' , 'p.title' , 'p.msrp' , 'i.files' ) ;
if( Auth::check() ) array_push( $fields , 'p.cost' ) ;

我正在使用DB::raw尝试LEFT JOIN:

->leftJoin(DB::raw( "( SELECT GROUP_CONCAT( images.filename SEPARATOR ',' ) , product_id FROM images GROUP BY product_id ) i" , "i.product_id", "=" , "p.id" )

出于某种原因,这不起作用......我做错了什么?我需要使用DB::raw,以便GROUP_CONCAT表中images多行可以分隔成一个字符串。

在切线上...我认为不支持子查询选择,所以如果有人有更好的选择,请告诉我。

0 个答案:

没有答案