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

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

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

  1. trips
  2. id => int
  3. price => float
  4. city_id => uint
  5. ........
  6. ratings:
  7. id => int
  8. ratable_id => int
  9. ratable_type=> varchar
  10. rate => small-int
  11. ......

我是如何做到这一点的:

  1. \App\Models\Trip::where('price','>=','100')->with(['ratings' => function ($query) {
  2. $query->groupBy('ratings.rate');
  3. }])->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#

使用不同的方法:

  1. $grouped = [];
  2. $trips = \App\Models\Trip::where('price', '>=', '100')->with('ratings')->get();
  3. foreach($trips as $trip) {
  4. foreach($trip->ratings as $rating) {
  5. $grouped[$rating->rate][] = $trip;
  6. }
  7. }

或使用联接:

  1. $trips = \App\Models\Trip::select('trips.*', 'ratings.rate')
  2. ->join('ratings', 'ratings.ratable_id', 'trips.id')
  3. ->where('ratings.ratable_type', 'App\Models\Trip')
  4. ->where('trips.price', '>=', '100')
  5. ->get();
  6. $grouped = $trips->groupBy('rate');
展开查看全部

相关问题