ホームページ >バックエンド開発 >PHPチュートリアル >Laravel WhereIn と GroupBy: 「1055 エラー」を解決するには?
問題:
Laravel で、単一のクエリで WhereIn 句と GroupBy 句の両方を使用すると、次の結果が得られます。エラー:
SQLSTATE[42000]: Syntax error or access violation: 1055 'sbrtpt.loading.id' isn't in GROUP BY
説明:
デフォルトでは、Laravel のデータベース設定は厳密な SQL モードを適用し、WHERE 句で参照されるすべての列も出現する必要があります。クエリに GROUP BY 操作が含まれる場合は、GROUP BY 句。この特定のケースでは、id 列が WhereIn 句には含まれていますが、GroupBy 句には含まれていないため、エラーが発生します。
解決策:
考えられる解決策は 2 つあります。この問題に対処するには:
オプション 1: Strict を無効にするMode
strict モードを無効にするには、config/database.php ファイルに移動し、次のように mysql 配列設定を変更します。
'mysql' => [ ... 'strict' => false, ... ]
strict を false に設定すると、効果的にすべての厳密モード ルールを無効にします。
オプション 2: 特定のルールを指定します。 Modes
または、問題の原因となっている特定のルールのみを無効にして厳密モードを維持したい場合は、config/database.php の 'mysql' 配列内の 'modes' オプションを変更します。たとえば、ONLY_FULL_GROUP_BY モードを無効にするには、次の行を追加します。
'modes' => [ // Disable this to allow grouping by one column 'ONLY_FULL_GROUP_BY', // Other strict mode options ]
追加情報:
一般的には 2 番目のオプション (特定のオプションを指定する) を使用することをお勧めします。これにより、厳密モードの利点を維持しながら、必要な厳密モード ルールのみを無効にすることができます。特定のデータベース管理システム (MySQL など) のドキュメントを確認することで、このエラーを処理するためにどの追加モードが適切かを判断できます。
以上がLaravel WhereIn と GroupBy: 「1055 エラー」を解決するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。