代码之家  ›  专栏  ›  技术社区  ›  Leon N

拉维尔雄辩模型范围多准则

  •  0
  • Leon N  · 技术社区  · 6 年前

    我有一个关于在我的拉瓦夫雄辩模型中范围的定义的问题

    情况:

    我将作用域“Active”定义如下:

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

    Bat正如您所看到的,当enddate被填充时(用将来的日期填充,但是我如何添加startdate早于今天,enddate为空的条件)。

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

    2 回复  |  直到 6 年前
        1
  •  0
  •   Marcin Nabiałek    6 年前

    您可以使用:

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

    但因为在这两种情况下,startdate应该是过去的,所以可以使用:

    public function scopeActive($query)
    {
       return $query->whereDate('startdate', '<', Carbon::now()->toDateString())
                    ->where(function($q) {
                         $q->whereDate('enddate', '>', Carbon::now()->toDateString());
                           ->orWhereNull('enddate');
                      });
              });
    }
    
        2
  •  0
  •   Fabián Montero Rodríguez    6 年前

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

    Local Scopes