【问题标题】:Skipping if statements if don't get results form Database如果没有从数据库中获得结果,则跳过 if 语句
【发布时间】: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


【解决方案1】:

使用count() 获取初始查询的记录数。这将比使用-&gt;get() 快得多。您应该使用count() 的原因是,您不需要使用get() 查询的所有数据。仅查询 # 个结果显然比检索所有数据要快。
代码可能如下所示:

$matchesCount = $matches->count();
if($matchesCount > 0){
//continue with all other if
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多