I have a table structured as following named renewals.
------------------------------------------------
| 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 |
------------------------------------------------
I need to get record of each members with latest valid_upto date. How to do that using Laravel Eloquent. Any other easy method will be appreciated.
答案 0 :(得分:0)
在用户模型中
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',
}
}
]
答案 1 :(得分:0)
您可以使用以下查询。
df = dfRawData.filter(col("X").between("CB","CI","CR"))
答案 2 :(得分:0)
Renewals::groupBy('membership_id')->havingRaw('MAX(valid_upto)')->get();
或
Renewals::groupBy('membership_id')->having( function( $query )
{
$query->latest('valid_upto');
})->get();
答案 3 :(得分:0)
在普通的MySQL中,您可以通过以下方式获得每位成员的最新记录:
select a.*
from renewals a
left join renewals b on a.membership_id = b.membership_id
and a.valid_upto < b.valid_upto
where b.membership_id is null
使用Laravel,您可以使用查询构建器将其编写为:
DB::table('renewals as a')
->select('a.*')
->leftJoin('renewals as b', function ($join) {
$join->on('a.membership_id','=','b.membership_id')
->whereRaw(DB::raw('a.valid_upto < b.valid_upto'));
})
->whereNull('b.membership_id')
->get()