升级到laravel 5.3后不进行分组

mso*_*wal 5 php orm laravel laravel-5.2 laravel-5.3

这是在laravel 5.2上工作的代码

$menus = CmsMenuItem::groupBy('menu_id')->get();
Run Code Online (Sandbox Code Playgroud)

但现在它抛出了错误

SQLSTATE [42000]:语法错误或访问冲突:1055 SELECT列表的表达式#1不在GROUP BY子句中,并且包含非聚合列'convertifier_cms.cms_menu_items.id',它在功能上不依赖于GROUP BY子句中的列; 这与sql_mode = only_full_group_by(SQL:select*from'cms_menu_items'group by'menu_id')不兼容

我也试过了

 `strict => false` 
Run Code Online (Sandbox Code Playgroud)

在database.php但没有效果

Nil*_*Nil 11

试试这个数据库配置.

 '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)

并以这种方式使用查询

$menus =DB::table('cms_menu_item')
    ->select('*')
    ->groupBy('menu_id')
    ->get();
Run Code Online (Sandbox Code Playgroud)


vij*_*mar 6

根据此 PR 只需在您的数据库配置中尝试此操作

'strict' => false,
Run Code Online (Sandbox Code Playgroud)

如果不是,则存在一些已知问题。

请参考这些链接PR & Issue


M A*_*fan 5

转到您的 config/database.php 文件夹。在 mysql 配置数组中,将 strict => true 更改为 strict => false,一切都会正常工作。

'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)