簡體   English   中英

Laravel,選擇並分組-DB ::原始-問題

[英]Laravel, select and groupBy - DB::raw - issue

我一直在嘗試解決這個問題,我的第一個問題是這個問題及其按預期工作的方式。

問題是我不能選擇比groupBy中更多的列,所以我找到了一個解決方案: DB::raw('created_at as created_at')

但這給了我:

SQLSTATE[42000]: Syntax error or access violation: 1055 created_at' isn't in GROUP BY

廣告,如果我將“ create_at” groupBy(DB::raw('create_at'))和“ concept”添加到groupBy,則將它們分組,這是我想要避免的。

我的代碼是:

@forelse($transaction->where('status', '!=', 'ok')
                      ->select('user_id', 'option_id', 'status', 'concept', DB::raw('created_at as created_at'), DB::raw('concept as concept'))
                      ->groupBy('user_id')
                      ->groupBy('option_id')
                      ->groupBy('status')
                      ->get() as $transaction)

{{$transaction->concept}}
{{$transaction->created_at}}

謝謝 :)

SELECT語句中的每一列也必須位於GROUP BY子句中。

在MySQL 5.7.5或更高版本中,將only_full_group_by模式設置為false是一個例外,但是假設所有行的額外列都具有相同的值https://dev.mysql.com/doc/refman/5.7/en /group-by-handling.html

您也可以使用技巧為未分組的列獲取MAX()或MIN(),但除非將它們添加到GROUP BY語句中,否則您將無法獲得每一列的實際值,從而完成此操作

默認情況下啟用Mysql嚴格模式。 禁用嚴格模式,它將解決您的問題。

在config / database.php中的'mysql'

'strict' => true,

虛假。

'strict' => false,

好吧,多虧了@noufalcep和@Rob Fonseca Rob,我提出了這個解決方案,我認為這是在5.4版本嚴格設置為true之后的Laravel中發生的。

因此,我沒有完全禁用它,而是這樣做了:

'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' => true, #####I COMMENTED THIS####
            'modes' => [
                        //'ONLY_FULL_GROUP_BY', #####AND THIS####
                        'STRICT_TRANS_TABLES',
                        'NO_ZERO_IN_DATE',
                        'NO_ZERO_DATE',
                        'ERROR_FOR_DIVISION_BY_ZERO',
                        'NO_AUTO_CREATE_USER',
                        'NO_ENGINE_SUBSTITUTION',
            ],
            'engine' => null,
        ],

順便說一句,MAX MIN不適用於我,它仍在請求將其添加到groupBy中並請求一個數組

希望這對下一個有所幫助。

快樂編碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM