簡體   English   中英

Laravel 5.4 Raw無法正常工作,但在mySQL中工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM