Laravel : Syntax error or access violation: 1055 Error

public function uploads($count)
    {
        $items = \DB::table('article')
            ->select('pcode.name', \DB::raw('count(*) as upload_count'))
            ->leftJoin('pcode', 'article.organization_id', '=', 'pcode.id')
            ->where([
                ['pcode.type', '=', "organization_type"],
                ['article.status', '=', 1]
            ])
            ->groupBy('organization_id');
        return $items->paginate($count);
    }

上面這樣一段代碼, 測試服務器很好, 上線後報錯了.
Syntax error or access violation: 1055 Error : MySQL : isn't in GROUP BY
云云php

後來Google了一下說是sql_mode設置致使的問題, 修改 config/database.php這個配置 strict => falsemysql

'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,
],

而後試了一下 果真問題解決了 ,而後仔細查閱了一下緣由:laravel

查詢mysql 1055錯誤碼發現問題爲在mysql的配置中若是設置了sql_mode包含
ONLY_FULL_GROUP_BY值得話,在進行查詢時須要將select的字段都包含在group by 中。
即 select x,y from xxx group by x,y
不然就會報錯sql

總結:服務器

laravel 5.3 是默認開啓 mysql嚴格模式的.
mysql在嚴格模式下, 而且開啓了ONLY_FULL_GROUP_BY的狀況下,
group by 的字段沒有出如今 select 的語句中會報錯.關閉了嚴格模式就不會報錯.測試