Laravel groupBy hatası Laravel Eloquent ORM kaynaklı bir hata olarak karşımıza çıkıyor.
Laravel Eloquent ORM, birçok veritabanı işlemini yazılım geliştiriciler için kolaylaştırmayı hedefliyor ve güvenlikle ilgili sorunları yaşanmadan engellemeyi amaçlıyor.
Ancak bazı durumlar var ki, yazılım geliştirme sürecinde, varsayılan ayarlar geliştiricilere sorunlar yaşatabiliyor. Bunlardan en yaygın olanı Laravel groupBy hatası.
Bu sorunu çözmek için Laravel’in config ayarlarında düzenlemeler yapmamız gerekebiliyor, çözüm birkaç yöntemle elde edilebilse de, en kolay yol strict modunu kapatmak oluyor.
1. Yöntem
Varsayılan olarak aşağıdaki gibi gelen config/database.php
dosyası içinde bulunan connections içindeki MySQL ayarlarında yapacağınız düzenlemeyle groupBy hatasının önüne geçebilirsiniz.
//... önceki satırlar
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true, //false //false yapmanız durumunda bu hatadan kurtulmuş olacaksınız.
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
//sonraki satırlar...
config/database.php2. Yöntem
Tabii tek çözüm de bu değil. Varsayılan MySQL bağlantısında -yine config/database.php
içerisinde- yapacağınız değişiklikler sayesinde daha sağlıklı bir sonuç elde edebilirsiniz. Aşağıdaki çözümde Eloquent ORM için hangi MySQL modlarını kullanacağını söylüyoruz. Burada varsayılan ayarları override ettiğimiz için laravel groupBy hatasından kurtulmuş oluyoruz.
//...önceki satırlar
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'modes' => [
//'ONLY_FULL_GROUP_BY', //bu mod, varsayılan olarak aktif olduğu için bu hatayı alırsınız
'STRICT_TRANS_TABLES',
'NO_ZERO_IN_DATE',
'NO_ZERO_DATE',
'ERROR_FOR_DIVISION_BY_ZERO',
'NO_AUTO_CREATE_USER',
'NO_ENGINE_SUBSTITUTION'
],
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
//sonraki satırlar...
config/database.phpYukarıdaki değişiklikleri yapmanız durumunda veritabanı motorunda ortaya çıkacak sorunların da önüne geçmiş olabilirsiniz.
Her iki yöntemde de Laravel groupBy hatasını almaktan kurtulmuş olacaksınız.