【发布时间】:2021-03-20 01:58:32
【问题描述】:
我有一个具有许多模型价格的模型产品。 每天都有不同的产品价格。
现在我正在尝试创建一个范围,为我提供最新价格介于两个值之间的所有产品。
我用 whereHas 查询试过这个:
public function scopePriceBetween($query, ...$priceRange) {
return $query->whereHas('price', function ($query) use ($priceRange) {
$query->latestPrice()->whereBetween('price', $priceRange);
})
}
价格模型的范围
public function scopeLatestPrice($query) {
return $query->latest('date')->limit(1);
}
但这会给我所有价格介于该范围之间的产品,而不仅仅是最新价格。
有没有办法在 eloquent 中以可接受的性能做到这一点,还是我需要在我的产品模型中添加 latest_price 列?
【问题讨论】:
-
您如何指定最新价格?你们有不同的产品价格吗?如果是的话,你是如何讲述这些故事的?
-
投稿我的回答让你满意吗?我认为在这种情况下使用范围不是一个好主意
-
我正在使用范围,因为我使用的包可以通过查询字符串进行过滤,然后将其转换为范围。 @PrafullaKumarSahu 价格是他们自己的模型,它们存储在一张桌子上,每天的价格。所以是的,一种产品有不同的价格。
-
所以我认为您可以使用我提到的一种方法来实现 last_price。并使用范围查询last_price。
-
我要在范围内创建临时表吗?
标签: laravel eloquent laravel-query-builder