基于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
运行另一个查询,但这不会真的像由于在一个查询中运行多个查询(我希望),所以尽可能优化。
答案 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);
}