SELECT列表不在GROUP BY子句中,并且包含未聚合的列'explore.ratings.id'

时间:2018-06-28 05:52:33

标签: php mysql laravel laravel-5 laravel-5.6

我想做的是选择行程,然后按费用分组。

  

请注意:评分是一种多态关系

假设我们有2个模型:

trips
  id => int
  price => float
  city_id => uint
........

ratings:
  id => int
  ratable_id => int
  ratable_type=> varchar
  rate => small-int
......

以及这里的尝试方法:

\App\Models\Trip::where('price','>=','100')->with(['ratings' => function ($query) {
        $query->groupBy('ratings.rate');
    }])->get();

Whoops!

  

“ SQLSTATE [42000]:语法错误或访问冲突:1055表达式#1   SELECT列表的内容不在GROUP BY子句中,并且包含未聚合的   列'explore.ratings.id'在功能上不依赖   GROUP BY子句中的列;这与   sql_mode = only_full_group_by(SQL:从ratings中选择*,其中   {(1,2)中的ratingsratable_idratingsratable_type =   {\ {1}}中的App \ Models \ Trip组。ratings}

1 个答案:

答案 0 :(得分:1)

使用其他方法:

$grouped = [];
$trips = \App\Models\Trip::where('price', '>=', '100')->with('ratings')->get();
foreach($trips as $trip) {
    foreach($trip->ratings as $rating) {
        $grouped[$rating->rate][] = $trip;
    }
}

或使用JOIN:

$trips = \App\Models\Trip::select('trips.*', 'ratings.rate')
    ->join('ratings', 'ratings.ratable_id', 'trips.id')
    ->where('ratings.ratable_type', 'App\Models\Trip')
    ->where('trips.price', '>=', '100')
    ->get();
$grouped = $trips->groupBy('rate');