select列表不在GROUPBY子句中,并且包含未聚合的列“explore.ratings.id”

inkz8wg9  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(369)

我要做的是选择行程,然后按比率分组。
注:评级是一种多态关系
我们有两种型号:

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]:语法错误或访问冲突:select list的1055表达式#1不在group by子句中,并且包含未聚合的列”“explore.ratings.id”“,该列在功能上不依赖group by子句中的列;这与sql\u mode=only\u full\u group\u by(sql:select*from)不兼容 ratings 哪里 ratings . ratable_id 在(1,2)和 ratings . ratable_type =应用程序\模型\行程分组依据 ratings . rate )

3xiyfsfu

3xiyfsfu1#

使用不同的方法:

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

或使用联接:

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

相关问题