Laravel雄辩模型范围多准则
关于我的Laravel雄辩模型中范围的定义,我有一个问题 情况: 型号为“Subscription”,具有a.o.属性“startdate”和“enddate”。Startdate为必填项,Enddate可选填写或为空 我定义了“活动”范围,如下所示:Laravel雄辩模型范围多准则,laravel,laravel-5,scope,model,eloquent,Laravel,Laravel 5,Scope,Model,Eloquent,关于我的Laravel雄辩模型中范围的定义,我有一个问题 情况: 型号为“Subscription”,具有a.o.属性“startdate”和“enddate”。Startdate为必填项,Enddate可选填写或为空 我定义了“活动”范围,如下所示: public function scopeActive($query) { return $query->whereDate('startdate', '<', Carbon::now())->where
public function scopeActive($query)
{
return $query->whereDate('startdate', '<', Carbon::now())->whereDate('enddate', '>', Carbon::now());
}
public函数作用域活动($query)
{
返回$query->whereDate('startdate','',Carbon::now());
}
Bat正如您所看到的,当enddate被填充时(用将来的日期,但是如何添加我的startdate早于今天,并且enddate为null的条件),这种方法可以很好地工作
我假设有一个合适的解决方案,但在文档中找不到。您可以使用:
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函数作用域活动($query)
{
返回$query->where(函数($q){
$q->where(函数($q){
$q->whereDate('startdate','',Carbon::now()->toDateString());
})->orWhere(函数($q){
$q->whereDate('startdate','',Carbon::now()->toDateString());
->或wherenull(“结束日期”);
});
});
}
您应该使用参数化作用域
public function scopeActive($query, $param)
{
if(isset($param)) return $query->whereDate('startdate', '<', Carbon::now())->whereDate('enddate', '>', $param);
return $query->whereDate('startdate', '<', Carbon::now());
}
公共函数作用域活动($query,$param)
{
if(isset($param))返回$query->whereDate('startdate','',$param);
return$query->whereDate('startdate','我更喜欢第二个解决方案!我实现了这个解决方案,并且工作得非常完美。只有一个小问题:以$qThnx开头的行中有一个分号太多,都是为了考虑解决方案
public function scopeActive($query, $param)
{
if(isset($param)) return $query->whereDate('startdate', '<', Carbon::now())->whereDate('enddate', '>', $param);
return $query->whereDate('startdate', '<', Carbon::now());
}