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();
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, ] ]
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();
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!