我想做的是选择行程,然后按费用分组。
请注意:评分是一种多态关系
假设我们有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)中的ratings
。ratable_id
和ratings
。ratable_type
= {\ {1}}中的App \ Models \ Trip组。ratings
}
答案 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');