拉拉维尔雄辩模型范围多个标准



我有一个关于我的 Laravel 雄辩模型中范围定义的问题

情况: 模型是"订阅",它具有属性"开始日期"和"结束日期"。开始日期是必需的,结束日期是可选的填充或空

我定义了一个范围"活动",如下所示:

public function scopeActive($query)
{
return $query->whereDate('startdate', '<', Carbon::now())->whereDate('enddate', '>', Carbon::now());
}

正如您所看到的,当结束日期被填充时,这工作正常(将来的日期,但我如何添加我的开始日期早于今天并且结束日期为空的条件。

我认为有一个合适的解决方案,但我在文档中找不到它。

您可以使用:

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');
});
});
}

但由于在这两种情况下,开始日期都应该是过去,您可以使用:

public function scopeActive($query)
{
return $query->whereDate('startdate', '<', Carbon::now()->toDateString())
->where(function($q) {
$q->whereDate('enddate', '>', Carbon::now()->toDateString());
->orWhereNull('enddate');
});
});
}

你应该使用参数化的作用域

public function scopeActive($query, $param)
{
if(isset($param)) return $query->whereDate('startdate', '<', Carbon::now())->whereDate('enddate', '>', $param);
return $query->whereDate('startdate', '<', Carbon::now());
}

本地作用域

最新更新