如何与Laravel查询范围相反

时间:2016-08-09 15:40:21

标签: laravel laravel-5 eloquent query-builder

在Laravel中,您可以定义查询范围以定义约束。有没有办法得到这个范围的反面?这是一个微不足道的例子:

function scopeMale($query) {
  return $query->whereGender("M");
}

假设性别的唯一选择是" M"和" F"。因此,这将为我们提供所有男学生的名单。

$male = Students::male()->get();

Laravel有没有办法在范围之外定义其他所有内容?即

之类的东西
$female = Students::!male()->get();

我知道一个人总是可以创建另一个范围female(),但是只要有一些与给定范围相反的东西会很好。

2 个答案:

答案 0 :(得分:2)

我无法知道如何实现您的目标。

但是,您总是可以创建一个更动态的查询范围来处理这两种情况:

function scopeGender($query, $gender) {
  return $query->whereGender($gender);
}

$male = Students::gender('M')->get();
$female = Students::gender('F')->get();

答案 1 :(得分:0)

你可以这样做(字段,运算符,值):

$female = Students::where('gender', '<>', 'M')->get();

这是一本书的例子(学习Laravel的Eloquent,由Francesco Malatesta,PACKT。第55页)

    Route::get('...', function(){
        $results = \App\Book::where(function($query){
            $query
                ->where(function($query){
                    // other conditions here...
                    $query->where(function($query){
                        // deeper and deeper in the seas of
                        conditions...
                    });
                })
                ->orWhere('field', 'operator', 'condition');
        })->orWhere(function($query){
            $query
                ->where('field', 'operator', 'condition')
                ->orWhere(function($query){
                    // other conditions here...
                });
        })->get();
        return $results;
    });