خطای sql_mode=only_full_group_by
گاهی اوقات وقتی چند جدول رو باهم جوین میکنیم و میخایم عملیات groupBy رو روی کوئری خودمون در لاراول داشته باشیم برای حذف تکراری ها با خطای ذیل مواجه میشیم
SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'orien.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 `products`.*, `product_addresses`.*, `product_addresses`.`section`, `product_addresses`.`region`, `product_units_plans`.`type_vahed` from `products` inner join `product_addresses` on `product_addresses`.`product_id` = `products`.`id` inner join `product_units_plans` on `product_units_plans`.`product_id` = `products`.`id` where `products`.`status` <> 0 and `products`.`id` in (2, 2, 1) and `products`.`deleted_at` is null group by `products`.`title` order by `products`.`id` desc limit 12 offset 0)
این خطا بخاطر این مسئله اتفاق افتاده که مقدار strict برابر true قرار داره در تنظیمات دیتابیس پس برای حل این مشکل اول این مقدار رو برابر با false قرار میدیم
'strict' => false
in your config/database.php file. In array connections => mysql =>
strict در mysql چیست؟
Strict Mode وظیفه کنترل اعتبار داده های وارد شده در دیتابیس را دارد یعنی وقتی غیرفعال باشید شما میتونید داده های غیرمعتبر هم در فیلدهاتون قرار بدید. در ذیل نحوه حذف ONLY_FULL_GROUP_BY رو از دیتابیس mysql تشریح کردیم که باید برای استفاده از groupBy این قسمت هم حذف شود.
حذف ONLY_FULL_GROUP_BY از دیتابیس mysql
- phpmyadmin رو از طریق مرورگر بازکنید و بخش localhost رو انتخاب کنید
- در منوی بالایی وارد بخش Variables شوید و سپس sql mode رو سرچ کنید تا بتونید پیداش کنید
- روز گزینه edit کلیک کنید و گزینه ONLY_FULL_GROUP_BY رو حذف کنید