在关系有条件的情况下加载laravel模型

时间:2017-03-06 21:44:37

标签: laravel eloquent relationship

我想知道如何加载满足特定条件的所有类型的模型 让我们进行以下示例设置。 我有2个雄辩的模型,HouseRentalHousehasMany的关系Rental

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

Rental类有一个review列,其中包含以下值:positivenegative

现在我想“覆盖”默认查询构建器,可以使用以下命令完成:

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

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

我想知道如何更改默认House查询,只返回至少包含任意数字House} x的{​​{1}}个实例Rentals等于review

所以positive应该只返回House::all()至少Houses x positive

奖励点如果您还可以解释如何添加另一个可用于查询所有Rentals的函数

我的问题似乎与Laravel的Houses特征有很多共同点,softDeletes模型只查询softDeletes列非空的模型。我的问题的奖金部分可以被视为查询的deleted_at选项 该应用程序基于Laravel 5.4。

1 个答案:

答案 0 :(得分:3)

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

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

此处,$x是房屋出现前必须具有的正面评价数量。

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