Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Membetulkan \'Ungkapan #1 Senarai PILIH Laravel Eloquent Bukan dalam GROUP BY\' Ralat MySQL?

Bagaimana untuk Membetulkan \'Ungkapan #1 Senarai PILIH Laravel Eloquent Bukan dalam GROUP BY\' Ralat MySQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-19 11:27:02933semak imbas

How to Fix Laravel Eloquent's

Menyelesaikan "Ungkapan #1 Senarai SELECT MySQL Bukan dalam GROUP BY" Ralat dalam Laravel Eloquent

Dalam Laravel Eloquent, ralat biasa ditemui ialah ralat "Ungkapan #1 Senarai SELECT tiada dalam klausa GROUP BY" apabila menggunakan kaedah groupBy(). Ini biasanya berlaku apabila lajur tidak teragregat disertakan dalam senarai SELECT semasa pengagregatan dilakukan pada lajur lain.

Pertimbangkan pertanyaan Laravel 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 mungkin mengakibatkan ralat berikut:

SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1
of SELECT list is not in GROUP BY clause and contains nonaggregated
column 'myshop.products.id' which is not functionally dependent on
columns in GROUP BY clause; this is incompatible with
sql_mode=only_full_group_by (SQL: select * from products where
status = 1 and stock > 0 and category_id = 5 group by store_id
order by updated_at desc limit 4)

Untuk menyelesaikan isu ini, lumpuhkan mod ketat MySQL dalam tetapan sambungan pangkalan data. Mod ini menguatkuasakan sintaks SQL dan kumpulan lajur yang lebih ketat, yang boleh bercanggah dengan pertanyaan yang sedang dilaksanakan.

Ubah suai konfigurasi pangkalan data dalam fail config/database.php:

'connections' => [
    'mysql' => [
        // Behave like MySQL 5.6
        'strict' => false,

        // Behave like MySQL 5.7
        'strict' => true,
    ]
]

Tetapkan ketat pilihan untuk palsu untuk melumpuhkan mod ketat dalam sambungan MySQL. Ini sepatutnya menyelesaikan ralat "Ungkapan #1 Senarai PILIH Bukan dalam KUMPULAN OLEH".

Untuk tetapan konfigurasi lanjutan, rujuk catatan blog oleh Matt Stauffer.

Atas ialah kandungan terperinci Bagaimana untuk Membetulkan \'Ungkapan #1 Senarai PILIH Laravel Eloquent Bukan dalam GROUP BY\' Ralat MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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