我有一个结构如下命名续订的表。

------------------------------------------------
| id  | membership_id| valid_from | valid_upto |
------------------------------------------------
|  1  | 1            | 2015-02-15 | 2016-02-15 |
|  2  | 2            | 2015-05-16 | 2016-05-16 |
|  3  | 2            | 2016-05-16 | 2017-05-16 |
|  4  | 3            | 2014-06-16 | 2015-06-16 |
|  5  | 3            | 2015-06-16 | 2016-06-16 |
|  6  | 3            | 2016-06-16 | 2017-06-16 |
|  7  | 1            | 2016-02-15 | 2017-02-15 |
------------------------------------------------


我需要记录每个成员的最新有效日期。如何使用Laravel Eloquent做到这一点。任何其他简单的方法将不胜感激。

最佳答案

在用户模型中

public function latest_renewal()
{
    return $this->hasOne('App\Renewals', 'membership_id')->latest('valid_upto');
}


在控制器中

$users = User::with('latest_renewal')->get();
/*
 [
   {
     'id' => 1,
     'name' => 'user1',
     'latest_renewal' => {
         'id' => 7,
         'membership_id' => 1,
         'valid_from' => '2016-02-15',
         'valid_upto' => '2017-02-15',

     }
   },
   {
     'id' => 2,
     'name' => 'user2',
     'latest_renewal' => {
         'id' => 3,
         'membership_id' => 2,
         'valid_from' => '2016-05-16',
         'valid_upto' => '2017-05-16',

      }
    }
 ]

关于mysql - 如何获得使用Laravel Eloquent 模型的groupBy()创建的每个组的第一条记录?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46707013/

10-15 17:54