加载关系有条件的 laravel 模型
Load laravel model where relationship has condition
我想知道如何加载满足特定条件的类型的所有模型。
让我们采用以下示例设置。
我有 2 个 eloquent 模型,House
和 Rental
。 House
与 Rental
有 hasMany
关系。
public function rentals()
{
return $this->hasMany(Rental::class);
}
租金 class 有一个 review
列,可以包含以下值:positive
或 negative
。
现在我想要 "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
模型中的一个函数中,您可以重复使用它,而不用担心它默认工作。
我想知道如何加载满足特定条件的类型的所有模型。
让我们采用以下示例设置。
我有 2 个 eloquent 模型,House
和 Rental
。 House
与 Rental
有 hasMany
关系。
public function rentals()
{
return $this->hasMany(Rental::class);
}
租金 class 有一个 review
列,可以包含以下值:positive
或 negative
。
现在我想要 "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
模型中的一个函数中,您可以重复使用它,而不用担心它默认工作。