Laravel eloquent使用其他搜索条件查找max(date)

时间:2015-11-06 04:10:14

标签: php mysql laravel eloquent

我试图找出从数据库中检索结果的最佳方法,以便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()等的组合,以使有说服力的陈述有效。

1 个答案:

答案 0 :(得分:0)

我认为你正在建立的关系,这是错误的.. 如果将使用关系hasMany(),问题非常简单。

首先提取所有最新的条目,然后过滤掉max

class Location extends model
{
...
   public function latestValue()
   {
      return $this->hasMany('App\Temp')->latest();
   }

休息不是我想象的那么多。