laravel:如果不确定是否需要子句,如何附加到查询

9nvpjoqh  于 2021-06-25  发布在  Mysql
关注(0)|答案(4)|浏览(269)

我正在创建一个过滤搜索系统,人们可以选择哪些过滤器添加到他们的搜索。我希望能够添加一个过滤器,这取决于它的存在。
所以,通常在laravel中执行这样的查询:

$users = User::where('active', '=', 1)->orWhere('subscribed', '=', 1)->get();

但是如果你不知道你是否要用 orWhere() 条款。我该怎么做?

5kgi1eie

5kgi1eie1#

可以使用where作用域附加where子句:

$users = User::where(function($query) use ($subscribed) {
             $query->where('status', 1);
             if ($subscribed)
                 $query->orWhere('subscribed', 1);
         })->get();
oxcyiej7

oxcyiej72#

当一个方法

$users = User::when(condition1, function ($query) {

                $query->where('subscribed', '=', 1);

            })->when(condition2, function ($query) {

                $query->where('filter', '=', 3);

            })->get();
arknldoa

arknldoa3#

你的问题我不是100%清楚,但这里有一个方法:

$query = User::where('active', '=', 1);
if ($needSubscribers) {
  $query = $query->orWhere('subscribed', '=', 1);
}
if ($needOtherCriteria) {
  $query = $query->orWhere('filter', '=', 3);
}
$users = $query->get();
00jrzges

00jrzges4#

你可以用 User::query() 要获取查询,请根据应用程序逻辑动态添加子句:

$query = User::query();
if(Request::get('active')){
    $query = $query->whereActive();
}
if(Request::get('subscribed')){
    $query = $query->orWhere('subscribed', 1);
}
return $query->get();

相关问题