我想知道如何加载满足特定条件的所有类型的模型
让我们进行以下示例设置。
我有2个雄辩的模型,House
和Rental
。 House
与hasMany
的关系Rental
。
public function rentals()
{
return $this->hasMany(Rental::class);
}
Rental类有一个review
列,其中包含以下值:positive
或negative
。
现在我想“覆盖”默认查询构建器,可以使用以下命令完成:
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。
答案 0 :(得分:3)
您希望使用whereHas
加载符合特定条件的房屋。
$houses = House::whereHas('rentals', function($q) {
$q->where('review', 'positive');
}, '>=', $x)->get();
此处,$x
是房屋出现前必须具有的正面评价数量。
这很简单,所以我不确定它是否仍然是将此条件添加为默认值的候选者,因为您还希望能够有时删除默认值。也许更好的解决方案是将其放在House
模型中的一个函数中,您可以重复使用它,而不用担心默认情况下它是否正常工作。