我有一个employees表和一个连接到另一个表的表,其中有加入日期和辞职日期,默认值为null,所以当我选择一个日期时,比如今天,我想检索所有选择的日期介于加入日期和辞职日期之间的员工,但对于许多人来说,辞职的默认值将为null。所以查询不起作用。下面是我目前的代码
\DB::table('caregivers')
->join('caregiver_professional_details',function($q){
$q->on('caregivers.id', '=','caregiver_professional_details.caregiver_id')
->where('caregiver_professional_details.role','=','Caregiver')
->whereDate('caregiver_professional_details.date_of_joining','<=',$date
->whereDate('caregiver_professional_details.resignation_date','>=',$date);
})
因此,当我选择任何小于或等于2018年12月20日的日期时,1和2都应该显示如果我选择21日及以上,只有2个应该显示
3条答案
按热度按时间yhxst69z1#
你应该使用
where()
带闭包+orWhereNull()
.另外,我认为最好使用别名以提高可读性。
rmbxnbpk2#
您的查询应如下所示:
2w2cym1i3#
我认为您的逻辑是,您希望匹配输入日期早于加入日期、辞职日期晚于输入日期或辞职日期为的员工
NULL
在这种情况下,我们可以假定他还没有辞职。也就是说,我建议你WHERE
条款:要在您的laravel代码中形成此逻辑,我们可以使用匿名函数: