Laravel 5.2 Eloquent - 每个用户在最大日期之前只获得一个模型
Laravel 5.2 Eloquent - Get only one model per user by max date
所以我需要获取用户的最后贡献日期。有一个属于报告的贡献模型,该报告具有 receipt_date
,这是我需要查看以确定的内容。
贡献:
class Contribution extends Base
{
// Belongs To -----
public function report()
{
return $this->belongsTo('App\Models\Remittance\Report', 'report_number_id');
}
}
报告:
class Report extends Base
{
// Has Many -----
public function contributions() {
return $this->hasMany('App\Models\Remittance\Contribution', 'report_number_id');
}
}
这就是我正在尝试做的事情:
(new App\Models\Remittance\Contribution)->select(['vip_id', 'report_number_id'])
->with(['report' => function($query) {
$query->select(DB::raw('max(receipt_date)'));
}])
->whereIn('vip_id', $vipIds)->groupBy('vip_id')->get();
所以这里的想法是,我想要一份附有报告和最新接收日期的捐款。然而,我得到了每个用户的贡献,但所有这些人的报告关系都是空的。
我做错了什么?
在查询中尝试 using ->distinct()
。
我最终能够这样做:
(new App\Models\Remittance\Report)->select(DB::raw('max(receipt_date) as lastReceiptDate, cr_member_transaction.vip_id'))
->join('cr_member_transaction', 'cr_report_transaction.report_number_id', '=', 'cr_member_transaction.report_number_id')
->whereIN('cr_member_transaction.vip_id', $vipIds)
->groupBy('cr_member_transaction.vip_id')->get()->lists('lastReceiptDate', 'vip_id');
希望对您有所帮助
所以我需要获取用户的最后贡献日期。有一个属于报告的贡献模型,该报告具有 receipt_date
,这是我需要查看以确定的内容。
贡献:
class Contribution extends Base
{
// Belongs To -----
public function report()
{
return $this->belongsTo('App\Models\Remittance\Report', 'report_number_id');
}
}
报告:
class Report extends Base
{
// Has Many -----
public function contributions() {
return $this->hasMany('App\Models\Remittance\Contribution', 'report_number_id');
}
}
这就是我正在尝试做的事情:
(new App\Models\Remittance\Contribution)->select(['vip_id', 'report_number_id'])
->with(['report' => function($query) {
$query->select(DB::raw('max(receipt_date)'));
}])
->whereIn('vip_id', $vipIds)->groupBy('vip_id')->get();
所以这里的想法是,我想要一份附有报告和最新接收日期的捐款。然而,我得到了每个用户的贡献,但所有这些人的报告关系都是空的。
我做错了什么?
在查询中尝试 using ->distinct()
。
我最终能够这样做:
(new App\Models\Remittance\Report)->select(DB::raw('max(receipt_date) as lastReceiptDate, cr_member_transaction.vip_id'))
->join('cr_member_transaction', 'cr_report_transaction.report_number_id', '=', 'cr_member_transaction.report_number_id')
->whereIN('cr_member_transaction.vip_id', $vipIds)
->groupBy('cr_member_transaction.vip_id')->get()->lists('lastReceiptDate', 'vip_id');
希望对您有所帮助