加载关系有条件的 laravel 模型

Load laravel model where relationship has condition

我想知道如何加载满足特定条件的类型的所有模型。
让我们采用以下示例设置。 我有 2 个 eloquent 模型,HouseRentalHouseRentalhasMany 关系。

public function rentals()
{
    return $this->hasMany(Rental::class);
}

租金 class 有一个 review 列,可以包含以下值:positivenegative

现在我想要 "override" 默认查询构建器,可以使用以下方法完成:

public function newQuery($excludeDeleted = true) {
    return parent::newQuery($excludeDeleted);
}

注意:这不会更改默认行为。

我想知道如何将默认 House 查询更改为仅 return House 个实例,这些实例至少具有任意数量(x ) Rentals review 等于 positive.

所以 House::all() 应该只 return Houses 至少 x positive Rentals.

如果您还可以解释如何添加另一个可用于查询所有函数的函数,则加分 Houses

我的问题似乎与 Laravel 的 softDeletes 特征有很多共同点,softDeletes 模型仅查询 deleted_at 列为非空的模型。我的问题的额外部分可以看作是查询的 ::withTrashed() 选项。
该应用程序基于 Laravel 5.4.

您想使用 whereHas 加载符合特定条件的房屋。

$houses = House::whereHas('rentals', function($q) {
    $q->where('review', 'positive');
}, '>=', $x)->get();

这里,$x 是房子在出现之前必须获得的好评数。

它非常简单,所以我不确定它是否仍然是将此条件添加为默认条件的候选者,因为您有时也希望能够删除默认条件。也许更好的解决方案是将其放入 House 模型中的一个函数中,您可以重复使用它,而不用担心它默认工作。