在Laravel中,您可以定义查询范围以定义约束。有没有办法得到这个范围的反面?这是一个微不足道的例子:
function scopeMale($query) {
return $query->whereGender("M");
}
假设性别的唯一选择是" M"和" F"。因此,这将为我们提供所有男学生的名单。
$male = Students::male()->get();
Laravel有没有办法在范围之外定义其他所有内容?即
之类的东西$female = Students::!male()->get();
我知道一个人总是可以创建另一个范围female()
,但是只要有一些与给定范围相反的东西会很好。
答案 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;
});