【发布时间】:2021-12-31 20:11:10
【问题描述】:
我正在使用属性模型来过滤数据。从前端传递过滤器值。如果过滤器找不到来自数据库的匹配结果,则跳过过滤器。数据也是从模型和关系中过滤出来的。
问题:
如果查询没有结果,我想跳过 if 语句。问题是我在从模型中获取结果时没有使用 get() ,因为我想将查询与关系联系起来。如果任何 IF 语句变为 false,matches 变量中的所有数据都将变为空数组,因为我没有使用 get()。我想跳过变成假的 if 语句。
$matches = Property::with(['media', 'address', 'customer'])->where([
'agency_id' => session('agency_id'),
'purpose' => $propertyRequirement->purpose,
'category_id' => $propertyRequirement->category_id,
'sub_category_id' => $propertyRequirement->sub_category_id,
'urgency' => $propertyRequirement->urgency
])
->whereRelation('address', 'city', $propertyRequirement->propertyRequirementDetail->city)
->whereBetween('price', [$propertyRequirement->min_price, $propertyRequirement->max_price])
->whereBetween('area', [$propertyRequirement->min_area, $propertyRequirement->max_area]);
$filterCounter = 9;
if (!empty($propertyRequirement->propertyRequirementDetail->location) && $matches->whereRelation('address', 'location', $propertyRequirement->propertyRequirementDetail->location)->count() > 0) {
$matches->whereRelation('address', 'location', $propertyRequirement->propertyRequirementDetail->location);
$filterCounter++;
}
if ($propertyRequirement->category_id === 1) {
if (!empty($propertyRequirement->propertyRequirementDetail->min_bathrooms) && $matches->whereRelation('propertyDetail', 'bathrooms', '>=', $propertyRequirement->propertyRequirementDetail->min_bathrooms)->count() > 0) {
$matches = $matches->whereRelation('propertyDetail', 'bathrooms', '>=', $propertyRequirement->propertyRequirementDetail->min_bathrooms);
$filterCounter++;
}
if (!empty($propertyRequirement->propertyRequirementDetail->max_bathrooms) && $matches->whereRelation('propertyDetail', 'bathrooms', '<=', $propertyRequirement->propertyRequirementDetail->max_bathrooms)->count() > 0) {
$matches = $matches->whereRelation('propertyDetail', 'bathrooms', '<=', $propertyRequirement->propertyRequirementDetail->max_bathrooms);
$filterCounter++;
}
if (!empty($propertyRequirement->propertyRequirementDetail->min_rooms) &&
$matches->whereRelation('propertyDetail', 'rooms', '>=', $propertyRequirement->propertyRequirementDetail->min_rooms)->count() > 0) {
$matches = $matches->whereRelation('propertyDetail', 'rooms', '>=', $propertyRequirement->propertyRequirementDetail->min_rooms);
$filterCounter++;
}
if (!empty($propertyRequirement->propertyRequirementDetail->max_rooms) && $matches->whereRelation('propertyDetail', 'rooms', '<=', $propertyRequirement->propertyRequirementDetail->max_rooms)->count() > 0) {
$matches = $matches->whereRelation('propertyDetail', 'rooms', '<=', $propertyRequirement->propertyRequirementDetail->max_rooms);
$filterCounter++;
}
if (!empty($propertyRequirement->propertyRequirementDetail->parking_space) && $matches->whereRelation('propertyDetail', 'parking_space', $propertyRequirement->propertyRequirementDetail->parking_space)->count() > 0) {
$matches = $matches->whereRelation('propertyDetail', 'parking_space', $propertyRequirement->propertyRequirementDetail->parking_space);
$filterCounter++;
}
if (!empty($propertyRequirement->propertyRequirementDetail->year_build) && $matches->whereRelation('propertyDetail', 'year_build', $propertyRequirement->propertyRequirementDetail->year_build)->count() > 0) {
$matches = $matches->whereRelation('propertyDetail', 'year_build', $propertyRequirement->propertyRequirementDetail->year_build);
$filterCounter++;
}
} ```
【问题讨论】:
-
你能不能只使用get() 来检查if 语句并且不使用get() 传递模型?
-
是的,这是正确的方法,为什么我没有想到它。谢谢 但是如何跳过关系条件不能在关系之前使用get,它将通过错误。
标签: php laravel eloquent eloquent-relationship