Laravel Query Builder - where子句以编程方式等于任何内容

时间:2018-06-17 19:37:56

标签: mysql laravel laravel-5 laravel-query-builder

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

是否可以使一个查询构建器指定一个值以编程方式等于所有内容的语句?

我们说我有这段代码:

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<a data-id="123" class="a">link</a>
    <script type="text/javascript">
        $(document).ready(() => {
            $('.a').on('click',function() {
                console.log($(this).data("id"));
            })

        })
    </script>
</body>
</html>

如果$foo = 1; DB::table('users') ->select('*') ->where('status', '=', $foo) ->get(); 那么它很简单。查询将选择状态为1的所有内容。

问:是否可以为$foo = 1变量分配内容,以便select查询返回每条记录,而不管数据库中的状态如何?

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

$foo

但是,我正在寻找更短/更有效的解决方案。是否有可能 - 在Where语句中不使用$foo = 1; if ($foo === null) { DB::table('users') ->select('*') ->get(); } else { DB::table('users') ->select('*') ->where('status', '=', $foo) ->get(); }

1 个答案:

答案 0 :(得分:3)

您可以尝试这样的事情:

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

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

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

$result = $query->get();

甚至更多laravel-ish

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

Check more here.