我试图找出从数据库中检索结果的最佳方法,以便created_at
是最新的,并检查另一个值(在这种情况下,Temps->值)符合特定标准..
例如(某些信息缩写)
地点
+----+---------+
| ID | CITY |
+----+---------+
| 1 | DALLAS |
| 2 | CHICAGO |
| 3 | ATLANTA |
+----+---------+
TEMPS
+----+-------+----------+------------+
| ID | VALUE | CITY_ID | CREATED_AT |
+----+-------+----------+------------+
| 1 | 70 | 1 | 2010 |
| 2 | 95 | 1 | 2015 |
| 3 | 90 | 2 | 2010 |
| 4 | 80 | 2 | 2015 |
| 5 | 99 | 3 | 2015 |
+----+-------+----------+------------+
我的位置模型。
class Location extends model
{
...
public function latestValue()
{
return $this->hasOne('App\Temp')->latest();
}
在这种情况下,我只想要最新温度读数为>的位置。 90 ..
在我的控制器中,如果有
$highTemps = Location::with('latestValue')->get();
没有明确地遍历每个城市,有没有办法调整我的雄辩关系,甚至使用收集方法来过滤结果?
我看过filter()
,但我不确定如何在关系中使用它。特别是如果你试图深入过滤2-3个关系。 (想象一下,我开始使用Country-> states-> locations-> temps-> latestValue等)
让初始查询过滤结果会很棒。但我无法弄清楚groupBy()
和max()
以及having()
等的组合,以使有说服力的陈述有效。
答案 0 :(得分:0)
我认为你正在建立的关系,这是错误的..
如果将使用关系hasMany()
,问题非常简单。
首先提取所有最新的条目,然后过滤掉max
。
class Location extends model
{
...
public function latestValue()
{
return $this->hasMany('App\Temp')->latest();
}
休息不是我想象的那么多。