Laravel GroupBy Hatası

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.

PHP
 //... ö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.php

2. 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.

PHP
//...ö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.php

Yukarı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.

Categories: