[英]Laravel 5.4 Raw is not working as expected but working in mySQL
1. MySQL :
SELECT a.*,COUNT(DISTINCT b.id) AS IndianTruck,COUNT(DISTINCT d.id) AS BdTruck
FROM manifests a
JOIN truck_entry_regs b ON a.id = b.manf_id
LEFT JOIN truck_deliverys d ON a.id = d.manf_id
WHERE a.manifest='550/7'
GROUP BY a.id
2.Laravel 5.4
$results = DB::select('SELECT a.*, COUNT(DISTINCT b.id) AS IndianTruck,COUNT(DISTINCT d.id) AS BdTruck
FROM manifests a
JOIN truck_entry_regs b ON a.id = b.manf_id
LEFT JOIN truck_deliverys d ON a.id = d.manf_id
WHERE a.manifest=?
GROUP BY a.id', ['550/7'])
我有相同的查詢。 第一個查詢在MySQL(Sqlyog)上運行良好。 但是如果我在laravel 5.4應用程序上運行(第二個查詢),它會說:
QueryException in Connection.php line 647:
SQLSTATE[42000]: Syntax error or access violation: 1055 'dbblpa.a.port_id' isn't in GROUP BY (SQL: SELECT a.*, COUNT(DISTINCT b.id) AS IndianTruck,COUNT(DISTINCT d.id) AS BdTruck
FROM manifests a
JOIN truck_entry_regs b ON a.id = b.manf_id
LEFT JOIN truck_deliverys d ON a.id = d.manf_id
WHERE a.manifest=550/7
GROUP BY a.id)
加入后,如何從一個表返回所有數據,並從其他表返回cont? 如果我在選擇中添加a.id,a.name(例如選擇a.id,a.name,COUNT(DISTINCT b.id))並在GROUP BY中添加a.id和a.name,則它可以工作。 我是否應該從帶有計數的表中返回所有列的問題,我應該在group by中添加所有列嗎? 我知道這很奇怪! 然后,如何在laravel 5.4查詢生成器中獲得預期的結果?
Laravel 5.3和5.4默認情況下對MySQL使用嚴格模式。 這意味着還啟用了ONLY_FULL_GROUP_BY
SQL模式。 但是,如果您的MySQL版本至少為5.7.5,則可以按表的主鍵進行分組,並在SELECT子句中使用該表中的所有列,因為它們在功能上取決於PK。
MySQL 5.7.5及更高版本實現了對功能依賴性的檢測。 如果啟用了ONLY_FULL_GROUP_BY SQL模式(默認情況下),則MySQL拒絕查詢,其中選擇列表,HAVING條件或ORDER BY列表引用未在GROUP BY子句中命名且在功能上不依賴於它們的非聚合列。 (在5.7.5之前,MySQL不會檢測到功能依賴性,並且默認情況下未啟用ONLY_FULL_GROUP_BY。
( MySQL處理GROUP BY )
您的選擇是:
將MySQL升級到至少5.7.5
或者在laravels db config( config/database.php
)中禁用嚴格模式
// ..
'connections' => [
// ..
'mysql' => [
// ..
'strict' => false,
// ..
],
// ..
]
更新資料
對MariaDB(和xampp)用戶來說是個壞消息:MariaDB似乎還不支持“檢測功能依賴”(尚未)。 我只能找到這張票 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.