同じクエリでWhereInとGroupbyを使用して、結果を取得します。
私はこれを試しました:
$loadids=explode("#@*",$reciptdet->loading_id);
$loadingdatas=DB::table('loading')->groupBy('vehicle_no')->whereIn('id',$loadids)->get();
しかし、私はこのエラーメッセージを受け取りました:
SQLSTATE [42000]:構文エラーまたはアクセス違反:1055 'sbrtpt.loading.id'はGROUP BYにありません(SQL:select * from loading id from(14、15、16)group by vehicle_no)
config\database.php
-> "mysql"
配列
'strict' => false
を設定して、すべてを無効にします。
'strict' => true
のままにして、モードを"mysql"
オプションに追加できます
'mysql' => [
...
....
'strict' => true,
'modes' => [
//'ONLY_FULL_GROUP_BY', // Disable this to allow grouping by one column
'STRICT_TRANS_TABLES',
'NO_ZERO_IN_DATE',
'NO_ZERO_DATE',
'ERROR_FOR_DIVISION_BY_ZERO',
'NO_AUTO_CREATE_USER',
'NO_ENGINE_SUBSTITUTION'
],
]
すべてのstrictオプションを無効にする必要はないかもしれません...この問題について answer をご覧ください。
これはおそらく SQL_MODE の問題です。 config/database.php
の接続で、変更します
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,
],
私もこの問題を抱えていましたが、'strict' => true
を'strict' => false
に変更した後、エラーは消えました。
この設定は次の場所にあります。
config\database.php
'mysql' => [
...
'strict' => false,
...
]
雄弁にgroupByを使用する場合は、常にselect()関数のgroupBy関数で使用される列名を含めます。
$loadids=explode("#@*",$reciptdet->loading_id);
$loadingdatas=DB::table('loading')->select('vehicle_no')->groupBy('vehicle_no')->whereIn('id',$loadids)->get();//add select('vehicle_no')
また、設定ファイルで厳格モードを無効にすることは悪い習慣です。これを行うと、警告なしで無効な日付などの破損したデータがデータベースに入力される可能性があります。
'strict' => false
でのconfig\database.php
の設定は、セキュリティの問題である可能性があります。したがって、単純なLaravelソリューションは最初にget()
を呼び出し、次にgroupBy('vehicle_no)
を呼び出す:
$loadids = explode("#@*", $reciptdet->loading_id);
$loadingdatas = DB::table('loading')->whereIn('id', $loadids)->get();
$grouped = $loadingdatas->groupBy('vehicle_no');