语法错误或访问冲突:1140混合GROUP列laravel

Ale*_*lex 1 php laravel laravel-5 laravel-paginate

我已经用分页编写了这个查询

$items = Item::select('items.*', 'sub_category_name', 'category_name', 'sub_category_slug', 'category_slug')
        ->join('sub_categories AS sc', 'sc.sc_id', 'items.sub_category_id')
        ->join('categories AS c', 'c.category_id', 'sc.category_id')
        ->where('items.is_active', '=', 1)
        ->where('sc.is_active', '=', 1)
        ->where('c.is_active', '=', 1)
        ->where('sc.sc_id', '=', $sub_category_id)
        ->paginate(1);
Run Code Online (Sandbox Code Playgroud)

但它说

语法错误或访问冲突:1140如果没有GROUP BY子句,则GROUP列(MIN(),MAX(),COUNT(),...)的混合没有GROUP列是非法的

但是,当我添加->groupBy('item_id');它说

语法错误或访问冲突:1055'books.items.item_name'不在GROUP BY中

但是当我在groupBy子句中执行item_name时,它会将groupBy称为下一列.为什么?

Adn*_*taz 8

当您使用像MIN(),MAX(),COUNT() AVG()您必须使用的聚合函数时Group BY

但是最近MYSQL你必须使用select中的所有列作为一个组.

在你config/database.php关闭严格模式.

'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'charset' => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix' => '',
        'strict' => false,
        'engine' => null,
    ],
Run Code Online (Sandbox Code Playgroud)

'strict' => false 之后,您也可以在单个列上使用group by.