我如何解决与sql_mode=only_full_group_by不兼容的拉拉维尔雄辩?

我的啦的雄辩是这样的:

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

执行时,存在如下错误:

SQLSTATE[42000]:语法错误或访问冲突:SELECT 列表的 1055 表达式 #1 不在 GROUP BY 子句中,并且包含非聚合列 “myshop.products.id”,这在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by 不兼容(SQL:从中选择 * ,其中 = 1,> 0 和 = 5 按 desc 限制 4 的顺序分组)productsstatusstockcategory_idstore_idupdated_at

我该如何解决?


答案 1

我有一个类似的问题,并通过在数据库连接设置中禁用mysql严格模式来解决它。

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

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

您可以在 Matt Stauffer 的这篇博客文章中找到更多配置设置


答案 2

在文件夹配置= >数据库中.php确保mysql strictfalse,如下所示

'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'unix_socket' => env('DB_SOCKET', ''),
    'charset' => 'utf8',
    'collation' => 'utf8_general_ci',
    'prefix' => '',
    'strict' => false,
    'engine' => null,
],

如果 strict 为 true,则将其设置为 false,然后通过在 cmd 中运行此命令来清除配置现金

php 工匠配置:清除


推荐