【发布时间】:2019-02-20 05:59:01
【问题描述】:
ApplicantTbl
id | name |
--------------------
1 | John Doe |
2 | Maria Ozawa |
3 | Catriona Gray |
--------------------
EnrollmentRequestContentTbl
id | applicant_id | payment_status | enrollment_status |
--------------------------------------------------------------
1 | 1 | pending | null |
--------------------------------------------------------------
我的目标是获取所有的应聘者,包括申请人id 1 if:
-
enrollmentRequestContentTbl上的payment_status已付费 -
enrollmentRequestContentTbl上的payment_status是未付费,enrollment_status是back_out或declined
其余可能的条件将被忽略,并且无法从我的查询中获取。
上表将忽略申请人 1,因为 payment_status 是 pending。
如果 EnrollmentRequestContentTbl 看起来像这样
id | applicant_id | payment_status | enrollment_status |
--------------------------------------------------------------
1 | 1 | paid | null |
--------------------------------------------------------------
或者这个。由于paymet_status 未支付 enrollment_status 必须back_out 或拒绝
id | applicant_id | payment_status | enrollment_status |
--------------------------------------------------------------
1 | 1 | unpaid | back_out |
--------------------------------------------------------------
-
id | applicant_id | payment_status | enrollment_status |
--------------------------------------------------------------
1 | 1 | unpaid | declined |
--------------------------------------------------------------
申请人 1 将包含在我的查询中并显示在我的列表中。
- ApplicantModel
public function enrollmentRequestContent()
{
return $this->hasMany('App\EnrollmentRequestContent');
}
EnrollmentRequestContentModel
public function applicant()
{
return $this->belongsTo('App\Applicant')
}
到目前为止,这是我尝试过的。
控制器
public function getApplicant()
{
$applicants = Applicant::orWhereDoesntHave('enrollmentRequestContent', function($q){
$q->where('payment_status', '!=', 'paid')
->where(function($qq) {
$qq->where('payment_status', '!=', 'unpaid')
->whereIn('enrollment_status', ['declined', 'back_out']);
});
})->get();
return $applicants;
}
我正在使用 laravel 雄辩的查询。
【问题讨论】:
标签: laravel laravel-5 eloquent