Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menyelesaikan Ralat MySQL \'Tidak Serasi dengan sql_mode=only_full_group_by\' dalam Laravel Eloquent?

Bagaimana untuk Menyelesaikan Ralat MySQL \'Tidak Serasi dengan sql_mode=only_full_group_by\' dalam Laravel Eloquent?

DDD
Lepaskan: 2024-11-22 16:16:47
asal
926 orang telah melayarinya

How to Resolve MySQL's

Menyelesaikan Isu MySQL 'Incompatible with sql_mode=only_full_group_by' dalam Laravel Eloquent

Isu yang kerap dihadapi apabila menggunakan Laravel Eloquent untuk operasi pangkalan data #1 adalah ralat MySQL "Expression senarai SELECT tiada dalam klausa GROUP BY dan mengandungi lajur tidak terkumpul [...]." Ralat ini timbul disebabkan oleh mod ketat MySQL yang dikenali sebagai only_full_group_by.

Untuk memberikan contoh isu, pertimbangkan pertanyaan Eloquent berikut:

$products = Product::where('status', 1)
            ->where('stock', '>', 0)
            ->where('category_id', '=', $category_id)
            ->groupBy('store_id')
            ->orderBy('updated_at', 'desc')
            ->take(4)
            ->get();
Salin selepas log masuk

Melaksanakan pertanyaan ini boleh mengakibatkan ralat MySQL yang disebutkan di atas. Sebab untuk ini ialah mod only_full_group_by MySQL memerlukan semua lajur dalam senarai SELECT sama ada fungsi agregat (cth., COUNT, SUM) atau disertakan dalam klausa GROUP BY. Walau bagaimanapun, dalam pertanyaan ini, lajur id tidak disertakan dalam klausa GROUP BY tetapi terdapat dalam senarai PILIH.

Untuk menyelesaikan isu ini, satu kaedah yang berkesan ialah melumpuhkan mod ketat MySQL dalam tetapan sambungan pangkalan data :

'connections' => [
    'mysql' => [
        // Disabling strict mode for MySQL 5.6
        'strict' => false,
    ]
]
Salin selepas log masuk

Sebagai alternatif, anda boleh menambah lajur pada GROUP BY klausa:

$products = Product::where('status', 1)
            ->where('stock', '>', 0)
            ->where('category_id', '=', $category_id)
            ->groupBy('store_id', 'id')
            ->orderBy('updated_at', 'desc')
            ->take(4)
            ->get();
Salin selepas log masuk

Dengan melonggarkan mod ketat atau melaraskan pertanyaan agar sepadan dengan keperluan MySQL, anda boleh menghapuskan ralat ini dan berjaya mendapatkan semula data anda.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat MySQL \'Tidak Serasi dengan sql_mode=only_full_group_by\' dalam Laravel Eloquent?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan