这是我想要的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
多行可以分隔成一个字符串。
在切线上...我认为不支持子查询选择,所以如果有人有更好的选择,请告诉我。