Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyelesaikan `sql_mode=only_full_group_by` Konflik dalam Pertanyaan Fasih Laravel?
Penyelesaian Masalah Tidak serasi dengan sql_mode=only_full_group_by dalam Laravel Eloquent
Apabila melaksanakan Laravel Eloquent, ralat berkaitan dengan kemungkinan pertanyaan sql_mode=hanya_kumpulan_penuh_oleh. Ralat ini berlaku apabila pertanyaan mengandungi lajur tidak teragregat dalam klausa GROUP BY.
Punca:
Ralat disebabkan oleh mod MySQL yang ketat yang memerlukan semua lajur dalam senarai PILIH sama ada dikumpulkan atau diagregatkan dalam klausa GROUP BY. Dalam pertanyaan Eloquent yang disediakan, lajur id disertakan dalam senarai PILIH tetapi tidak disertakan dalam klausa KUMPULAN OLEH.
Penyelesaian:
Penyelesaian pilihan adalah dengan lumpuhkan mod MySQL yang ketat dalam tetapan sambungan pangkalan data. Ini boleh dilakukan dengan menambahkan perkara berikut pada fail config/database.php anda:
'mysql' => [ 'strict' => false, ],
Penyelesaian Alternatif:
Jika melumpuhkan mod ketat bukan pilihan , anda boleh mengubah suai pertanyaan untuk memastikan semua lajur dalam senarai SELECT sama ada dikumpulkan atau diagregatkan. Dalam kes pertanyaan contoh, ini boleh dicapai dengan menambahkan Product::raw('COUNT(*) as product_count') pada klausa SELECT dan pengumpulan mengikut store_id dan id:
$products = Product::where('status', 1) ->where('stock', '>', 0) ->where('category_id', '=', $category_id) ->groupBy(['store_id', Product::raw('id')]) ->orderBy('updated_at', 'desc') ->take(4) ->get();
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan `sql_mode=only_full_group_by` Konflik dalam Pertanyaan Fasih Laravel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!