Laravel 查询生成器 - where 子句以编程方式等于任何内容

Rad*_*ity 1 mysql laravel laravel-5 laravel-query-builder

我正在使用 Laravel 5.6 - 查询生成器。

是否可以以编程方式创建一个查询生成器 where 声明一个值等于所有内容?

假设我有这段代码:

$foo = 1;

DB::table('users')
  ->select('*')
  ->where('status', '=', $foo)
  ->get();
Run Code Online (Sandbox Code Playgroud)

如果$foo = 1那么就简单了。该查询将选择状态为 1 的所有内容。

问:是否可以将一些东西分配给$foo变量分配一些内容,以便选择查询返回每条记录,而不管数据库的状态如何?

当然,我可以用这样的 2 个查询语句来实现它:

$foo = 1;

if ($foo === null) {
  DB::table('users')
    ->select('*')
    ->get();
} else {
  DB::table('users')
    ->select('*')
    ->where('status', '=', $foo)
    ->get();
}
Run Code Online (Sandbox Code Playgroud)

但是,我正在寻找更短/更有效的解决方案。是否有可能以某种方式 - 不在raw codeWhere 语句中使用?

The*_*pha 5

你可以尝试这样的事情:

$query = DB::table('users')->select('*');

// $foo = 'get it...';

if ($foo) {
    $query->where('status', $foo);
}

$result = $query->get();
Run Code Online (Sandbox Code Playgroud)

甚至更多laravel-ish

$result = DB::table('users')->select('*')
          ->when($foo, function ($query) use ($foo) {
              return $query->where('status', $foo);
          })
          ->get();
Run Code Online (Sandbox Code Playgroud)

在这里查看更多信息。