获得最高和最高基于whereHas查询的最低数据

时间:2017-01-30 08:22:01

标签: mysql sql laravel laravel-5.3

基于apartment finder所有types apartments,基于表单搜索,正在显示/返回。这是使用whereHas查询完成的。

例如:

  

用户有不同的选择;花园/阳台,价格范围,楼层   等

     

正在根据这些选择运行查询,如果有的话   满足搜索要求的公寓父母   公寓(类型)正在退回。

最终,我想显示某个类型的living surface范围(lowest-highest),但每个living surface的{​​{1}}不同。

apartment返回highest lowest apartment.living_surface的最有效方法是什么。

whereHas

一个解决方案是(我认为)是挑选$types = Type::where('type', '=', 'studio')->whereHas('apartments', function ($query) use ($request) { if ($request->view == 'garden') { $query->where('view', '=', $request->view); } elseif ($request->view == 'balcony') { $query->where('view', '=', $request->view); } elseif ($request->view == 'other') { $query->where('view', '=', $request->view); } if ($request->floor == 'upper') { $query->where('floor', '<', '5'); } elseif ($request->floor == 'lower') { $query->where('floor', '>', '4'); } if ($request->sun == 'morning') { $query->where('sun', '=', 'morning'); } elseif ($request->sun == 'evening') { $query->where('sun', '=', 'evening'); } if ($request->price == '1') { $query->where('price', '<', '900'); } elseif ($request->price == '2') { $query->where('price', '<', '999'); } elseif ($request->price == '3') { $query->where('price', '>', '999'); } })->with('apartments')->get(); 的所有ids并根据apartments运行另一个查询,但这不会真的像由于在一个查询中运行多个查询(我希望),所以尽可能优化。

1 个答案:

答案 0 :(得分:0)

这可以通过Collection Methods - Laravel Docs

来完成

可以在查询的集合上运行方法 - 在本例中为$types

foreach ($types as $type) {
    $type->lowest_living_area = $type->apartments>sortBy('living_area')->first()->living_area);
    $type->highest_living_area = $type->apartments->sortBy('living_area')->last()->living_area);
}