laravel 5 中的自定义查询

Custom Queries in laravel 5

如何在 laravel 5.4

中 运行 这种类型的查询
     select items.id,items.name,total,region from items LEFT OUTER JOIN
     (select  purchases.region_id as region , sum(purchases_detail.quantity) 
     as total,purchases_detail.item_id
     from purchases_detail
     left join purchases on(purchases.id=purchases_detail.purchase_id)
     GROUP BY purchases_detail.item_id) pd on (pd.item_id=items.id)

当我在 DB::select('') 中尝试这个时 它给了我一个错误:

SQLSTATE[42000]: Syntax error or access violation: 1055 'amsdb.purchases.region_id' isn't in GROUP BY (SQL: select items.id,items.name,total,region from items LEFT OUTER JOIN (select purchases.region_id as region , sum(purchases_detail.quantity) as total,purchases_detail.item_id from purchases_detail left join purchases on(purchases.id=purchases_detail.purchase_id) GROUP BY purchases_detail.item_id) pd on (pd.item_id=items.id))

但是当我 运行 它运行良好 Phpmyadmin

正如错误消息告诉您的那样,purchases.region_id 列没有显示为聚合,您也没有按它分组。快速修复是从内部和外部查询中删除此列:

SELECT
    items.id,
    items.name,
    pd.total
FROM items
LEFT JOIN
(
    SELECT
        t1.item_id,
        SUM(t1.quantity) AS total
     FROM purchases_detail t1
     LEFT JOIN purchases t2
         ON t2.id = t1.purchase_id
     GROUP BY t1.item_id
) pd
     ON pd.item_id = items.id

不确定,但我认为 select() 方法不能包含您所有的 SQL 查询。

我不知道它是否有效,但试试这个。它使用许多查询构建器函数:

$subQuery = DB::table('purchases_detail')
    ->select(DB::raw('purchases.region_id as region , sum(purchases_detail.quantity) 
     as total,purchases_detail.item_id'))
    ->leftJoin('purchases', 'purchases.id', '=', 'purchases_detail.purchase_id')
    ->groupBy('purchases_detail.item_id')
    ->toSql();

$result = DB::table('items')
    ->select('items.id', 'items.name', 'total,region')
    ->leftJoin($subQuery . ' pd', 'pd.item_id', '=', 'items.id') // if not working, try ->leftJoin(DB::raw($subQuery) . ' pd', 'pd.item_id', '=', 'items.id')
    ->get();

由于您的查询有一个嵌套 SELECT,您必须分两次完成。