Laravel Eloquent의 SQL_MODE=ONLY_FULL_GROUP_BY 비호환성 수정
Laravel Eloquent는 강력한 데이터 조작 작업을 허용하지만 때로는 쿼리를 실행할 때 오류가 발생할 수 있습니다. . 이러한 오류 중 하나는 특히 sql_mode=only_full_group_by가 활성화된 경우 MySQL 엄격 모드 설정과 관련이 있습니다.
오류:
아래와 같은 쿼리를 실행하면, 오류가 발생할 수 있습니다.
$products = Product::where('status', 1) ->where('stock', '>', 0) ->where('category_id', '=', $category_id) ->groupBy('store_id') ->orderBy('updated_at', 'desc') ->take(4) ->get();
오류 메시지는 일반적으로 다음과 같습니다.
SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'myshop.products.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by (SQL: select * from products where status = 1 and stock > 0 and category_id = 5 group by store_id order by updated_at desc limit 4)
해결책:
이 문제에 대한 해결 방법 오류는 MySQL 엄격 모드 설정을 비활성화하는 것입니다. 이는 Laravel 애플리케이션의 데이터베이스 연결 설정에서 수행할 수 있습니다.
<code class="php">'connections' => [ 'mysql' => [ // Behave like MySQL 5.6 'strict' => false, // Behave like MySQL 5.7 'strict' => true, ] ]</code>
strict를 false로 설정하면 only_full_group_by 모드가 효과적으로 비활성화되고 SELECT 목록에서 집계되지 않은 열이 허용됩니다.
추가 팁:
이 문제와 관련된 고급 구성 옵션에 대해서는 Matt Stauffer의 블로그 게시물을 참조하세요. only_full_group_by를 비활성화하면 특정 유형의 쿼리에 영향을 미칠 수 있으므로 변경하기 전에 애플리케이션의 요구 사항을 고려해야 합니다.
위 내용은 Laravel Eloquent에서 SQL_MODE=ONLY_FULL_GROUP_BY 비호환성을 수정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!