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
,您必须分两次完成。
如何在 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
,您必须分两次完成。