Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Membetulkan SQL_MODE=ONLY_FULL_GROUP_BY Ketidakserasian dalam Laravel Eloquent?

Bagaimana untuk Membetulkan SQL_MODE=ONLY_FULL_GROUP_BY Ketidakserasian dalam Laravel Eloquent?

Linda Hamilton
Linda Hamiltonasal
2024-10-18 12:27:03887semak imbas

How to Fix SQL_MODE=ONLY_FULL_GROUP_BY Incompatibility in Laravel Eloquent?

Fixing SQL_MODE=ONLY_FULL_GROUP_BY Incompatibility in Laravel Eloquent

Laravel Eloquent allows for powerful data manipulation operations, but sometimes you may encounter errors when executing queries. One such error is related to the MySQL strict mode setting, specifically when sql_mode=only_full_group_by is enabled.

Error:

When you execute a query like the one below, you might get an error:

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

The error message typically looks like this:

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)

Solution:

The solution to this error is to disable the MySQL strict mode setting. This can be done in the database connection settings of your Laravel application:

<code class="php">'connections' => [
    'mysql' => [
        // Behave like MySQL 5.6
        'strict' => false,

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

By setting strict to false, you are effectively disabling the only_full_group_by mode and allowing non-aggregated columns in the SELECT list.

Additional Tips:

Refer to Matt Stauffer's blog post for more advanced configuration options related to this issue. Disabling only_full_group_by may have implications for certain types of queries, so you should consider your application's requirements before making changes.

Atas ialah kandungan terperinci Bagaimana untuk Membetulkan SQL_MODE=ONLY_FULL_GROUP_BY Ketidakserasian dalam Laravel Eloquent?. 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