sql >> Databáze >  >> RDS >> Mysql

Při použití stránkování laravel je vyvolána chyba MySQL

V MySQL 5.6 je možné nastavit režim SQL ONLY_FULL_GROUP_BY, ale není nastaven ve výchozím nastavení (viz https://dev.mysql.com/doc/refman/5.6/en/sql-mode.html ).

Aha, vidím, že se váš komentář objevil výše, potvrdili jste, že na vašem lokálním serveru je nastavena ONLY_FULL_GROUP_BY (MySQL 5.7).

Domnívám se, že jste v popisu problému něco uvedli špatně. Chyba by se měla zobrazit na vašem lokálním serveru, ale ne na živém serveru, pokud lokální má ONLY_FULL_GROUP_BY a live ne.

Navrhuji, abyste se ujistili, že ve vývoji používáte stejnou verzi jako verzi, kterou používáte v produkci, a také odpovídali stejnému režimu SQL. Předejdete tak zmatkům při vývoji.

Mám stejný návrh ohledně verze PHP. Pokud používáte nějaké nové funkce PHP 7 ve vývoji a poté je nasadíte na svůj živý server PHP 5.6, nebudou fungovat.

SQL, které popisujete, by mělo být v pořádku:

select count(*) as aggregate from `parameter_log_site_detail` where `site_id` = EPE

To je ve skutečnosti v pořádku, i když máte ONLY_FULL_GROUP_BY. Je jistě legální provést select count(*) všech odpovídajících řádků v tabulce. Pro tento dotaz nepotřebujete klauzuli GROUP BY.

Pokud však smícháte agregované sloupce s neagregovanými sloupci, porušili byste požadavky ONLY_FULL_GROUP_BY, protože neagregované sloupce by byly nejednoznačné.

select id, count(*) as aggregate from ...

Zajímalo by mě, zda Laravel před přípravou dotazu vkládá další sloupce do vašeho výběrového seznamu. Pro jistotu byste museli povolit protokol dotazů MySQL.

Všiml jsem si, že se o této chybě diskutuje o problémech Laravel:https://github.com /laravel/framework/issues/15232

Řešením, které několik uživatelů v tomto vlákně uvedlo, že problém řeší, je nastavit 'strict'=>false ve vašem Laravel config/database.php.

Ale vsadil bych se, že hlavní příčinou je to, že Laravel upravuje váš SQL dotaz.




  1. Funkce zálohování PDO MySQL

  2. SQL Server:Dynamická klauzule where

  3. Mohu parametrizovat název tabulky v připraveném příkazu?

  4. Nastavení escapování řetězce PostgreSQL