在 Laravel 上有另一个 Where 过滤器
Having another Where Filter on Laravel
我正在尝试进行搜索,并且只想 return 状态为 1,4 的用户。虽然当我尝试使用它时,它会抓住所有这些并忽略我最后的位置。
$officiants = Officiant::where('status',1)
->where('email', 'like', '%'.$item.'%')
->orWhere('lname', 'like', '%'.$item.'%')
->orWhere('lname', 'like', '%'.$item.'%')
->whereIn('status', [1,4])
->get();
我也试过了
$officiants = Officiant::where('status',1)
->where('email', 'like', '%'.$item.'%')
->orWhere('lname', 'like', '%'.$item.'%')
->orWhere('lname', 'like', '%'.$item.'%')
->where('status', 1)
->where('status', 4)
->get();
问题是您需要了解 where chaining 和 orWhere chaining 在 Laravel 中的工作原理。
当您说 $query->where(..a..)->orWhere(..b..)->where(..c..)->orWhere(..d..)
时,它将计算为:(a || (b && c) || d)
。您可能打算 ((a || b) && (c || d))
或者您可能打算 ((a && c) || b || d)
。这就是为什么当您需要高级 where 子句时,请使用 parameter grouping
你需要这样的东西:
$officiants = Officiant::where('status',1)
->where(function($query) use($item){
$query->where('email', 'like', '%'.$item.'%')
->orWhere('lname', 'like', '%'.$item.'%')
->orWhere('lname', 'like', '%'.$item.'%')
})
->whereIn('status', [1,4])
->get();
注意:这没有经过测试
我刚弄明白
$officiants = Officiant::where('status', 1)
->orWhere('status', 4)
->where(function ($query) use ($item) {
$query->where('email', 'like', '%'.$item.'%')
->where('lname', 'like', '%'.$item.'%')
->where('lname', 'like', '%'.$item.'%');
})->get();
我正在尝试进行搜索,并且只想 return 状态为 1,4 的用户。虽然当我尝试使用它时,它会抓住所有这些并忽略我最后的位置。
$officiants = Officiant::where('status',1)
->where('email', 'like', '%'.$item.'%')
->orWhere('lname', 'like', '%'.$item.'%')
->orWhere('lname', 'like', '%'.$item.'%')
->whereIn('status', [1,4])
->get();
我也试过了
$officiants = Officiant::where('status',1)
->where('email', 'like', '%'.$item.'%')
->orWhere('lname', 'like', '%'.$item.'%')
->orWhere('lname', 'like', '%'.$item.'%')
->where('status', 1)
->where('status', 4)
->get();
问题是您需要了解 where chaining 和 orWhere chaining 在 Laravel 中的工作原理。
当您说 $query->where(..a..)->orWhere(..b..)->where(..c..)->orWhere(..d..)
时,它将计算为:(a || (b && c) || d)
。您可能打算 ((a || b) && (c || d))
或者您可能打算 ((a && c) || b || d)
。这就是为什么当您需要高级 where 子句时,请使用 parameter grouping
你需要这样的东西:
$officiants = Officiant::where('status',1)
->where(function($query) use($item){
$query->where('email', 'like', '%'.$item.'%')
->orWhere('lname', 'like', '%'.$item.'%')
->orWhere('lname', 'like', '%'.$item.'%')
})
->whereIn('status', [1,4])
->get();
注意:这没有经过测试
我刚弄明白
$officiants = Officiant::where('status', 1)
->orWhere('status', 4)
->where(function ($query) use ($item) {
$query->where('email', 'like', '%'.$item.'%')
->where('lname', 'like', '%'.$item.'%')
->where('lname', 'like', '%'.$item.'%');
})->get();