ApplicantTbl
id | name |
--------------------
1 | John Doe |
2 | Maria Ozawa |
3 | Catriona Gray |
--------------------
EnrollmentRequestContentTbl
id | applicant_id | payment_status | enrollment_status |
--------------------------------------------------------------
1 | 1 | pending | null |
--------------------------------------------------------------
我的目标是使所有申请人都包括APP_ID 1 if
:
payment_status
上的enrollmentRequestContentTbl
已支付 payment_status
上的enrollmentRequestContentTbl
是未付款,而enrollment_status
是back_out
或declined
其余可能的条件将被忽略,并且无法从我的查询中获取。
由于payment_status
为pending
,因此上表将忽略申请人1。
如果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雄辩的查询。
答案 0 :(得分:1)
您实际上已经关闭。您只需要更改逻辑,这就是我所做的:
首先,使用pivot table
获取whereDoesntHave
中不存在的所有申请人。
下一步是仅在其状态为“已付款”(通过使用pivot table
或其orWhereHas
中存在的所有申请人状态为“未付款”,但其注册状态应为“退回”或“拒绝”(通过将orWhereHas
与whereIn
一起使用)。
$data = Applicant::whereDoesntHave('enrollmentRequestContents')
->orWhereHas('enrollmentRequestContents', function($q1){
$q1->where('payment_status', 'paid');
})
->orWhereHas('enrollmentRequestContents', function($q2){
$q2->where('payment_status', 'unpaid')
->whereIn('enrollment_status', ['back_out', 'declined']);
})
->get();
答案 1 :(得分:0)
您可以尝试使用下面的代码来满足您的条件。
public function getApplicant()
{
$applicants = Applicant::with(['enrollmentRequestContent'])
->whereHas('enrollmentRequestContent', function($query){
$query->where(function($q){
$q->whereIn('payment_status', ['declined', 'back_out'])
->where('payment_status', '!=','unpaid');
});
$query->orWhere('payment_status', '!=', 'paid');
})
return $applicants;
}