我对Laravel Eloquent模型中的范围定义有疑问
情况: 模型是“订阅”,具有属性“开始日期”和“结束日期”。开始日期是必填项,可以选择填写结束日期或为空
我将作用域定义为“活动”,如下所示:
public function scopeActive($query)
{
return $query->whereDate('startdate', '<', Carbon::now())->whereDate('enddate', '>', Carbon::now());
}
如您所见,当填充完结束日期(带有将来的日期)时,它可以很好地工作,但是我该如何添加开始日期早于今天且结束日期为null的条件。
我认为有一个适当的解决方案,但在文档中找不到。
答案 0 :(得分:0)
您可以使用:
defaultValue
但是因为在两种情况下开始日期都应该是过去,所以您可以使用:
public function scopeActive($query)
{
return $query->where(function($q) {
$q->where(function($q) {
$q->whereDate('startdate', '<', Carbon::now()->toDateString())
->whereDate('enddate', '>', Carbon::now()->toDateString());
})->orWhere(function($q) {
$q->whereDate('startdate', '<', Carbon::now()->toDateString())
->whereNull('enddate');
});
});
}
答案 1 :(得分:0)
您应该使用参数化作用域
public function scopeActive($query, $param)
{
if(isset($param)) return $query->whereDate('startdate', '<', Carbon::now())->whereDate('enddate', '>', $param);
return $query->whereDate('startdate', '<', Carbon::now());
}