Laravel如何使用whereHas返回相关的模型数据

时间:2017-03-26 10:00:30

标签: php laravel laravel-5 laravel-5.3

我有a模型Member模型

Ledger

我必须获取成员的分类帐记录(需要成员和分类帐数据),其中ledger.created_at =特定日期,例如class Member extends Model { public function ledger() { return $this->hasMany('App\Ledger','user_id'); } }

如果我运行以下脚本

ledger.created_at = 2017-03-26 14:15:26

我只获得会员数据,没有分类帐记录。

如果我运行以下脚本

 $members = Member::whereHas('ledger', function($q){
       $q->where('created_at', '2017-03-26 14:15:26');
 })->get();

我使用所需的分类帐记录获得的成员很好,但它也返回其他成员,其中分类帐记录= null,我不需要没有分类帐记录的成员。 (即我只需要ledger.created =' 2017-03-26 14:15:26以及分类帐记录的成员)

我怎样才能做到这一点?

我正在使用Laravel 5.3

1 个答案:

答案 0 :(得分:4)

同时使用whereHas()来过滤成员,with()加载ledger数据:

$members = Member::whereHas('ledger', function($q) {
    $q->where('created_at', '2017-03-26 14:15:26');
})
->with(['ledger' => function($q) {
    $q->where('created_at', '2017-03-26 14:15:26');
}])
->where('type', 5)
->paginate(10);