Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 选择列表不在GROUP BY子句中,并且包含未聚合的列“explore.ratings.id”_Php_Mysql_Laravel_Laravel 5_Laravel 5.6 - Fatal编程技术网

Php 选择列表不在GROUP BY子句中,并且包含未聚合的列“explore.ratings.id”

Php 选择列表不在GROUP BY子句中,并且包含未聚合的列“explore.ratings.id”,php,mysql,laravel,laravel-5,laravel-5.6,Php,Mysql,Laravel,Laravel 5,Laravel 5.6,我想做的是选择行程,然后按比率分组 注:评级是一种多态关系 鉴于我们有两种型号: trips id => int price => float city_id => uint ........ ratings: id => int ratable_id => int ratable_type=> varchar rate => small-int ...... 下面是我如何做到这一点的: \App\Models\Trip:

我想做的是选择行程,然后按比率分组

注:评级是一种多态关系

鉴于我们有两种型号:

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();
哎呀

SQLSTATE[42000]:语法错误或访问冲突:1055表达式1 of SELECT列表不在GROUP BY子句中,并且包含未聚合的 “explore.ratings.id”列,该列在功能上不依赖于 按子句分组的列;这是不符合的 sql_mode=仅_full_group_按sql:从评级中选择*,其中 1、2中的ratings.ratable_id和ratings.ratable_类型= App\Models\Trip group by rations.rate


使用不同的方法:

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

@MKhalidJunaid你的答案不是我想要的,你没有明白我说的@MKhalidJunaid none解决了我的问题,这就是为什么我尝试提出不同的解决方案奇怪的是,对于你的问题,这将帮助你前进,每次旅行可以有多个评级。您想使用哪一种方法进行分组?@MKhalidJunaid谢谢,我已经在看了。我正在避免使用这种方法,因为环路中存在N1+问题,行程越多,您必须进行的环路越多,为了收集它,这将是我的最后一个解决方案tho,如果我不能在mysql中一次完成它,你是说N+1查询问题吗?不是查询,因为它是迫不及待地加载的,而是循环本身,如果有很多评级,那么它本身将是昂贵的,从长远来看,这将是…我添加了一个不同的解决方案。