【问题标题】:Dynamic orWhere Clause动态 orWhere 子句
【发布时间】:2020-02-01 22:50:09
【问题描述】:

我想在我的查询中创建一个嵌套参数分组,其中嵌套where 之一的值是从表单中获取的。

if($request->view != '') {
    $query->where(function ($query) {
    $query->where('type', $request->view)
            ->orWhere('type', 2);
    })->get();
}

现在我收到Undefined variable: request。 如何获取函数中$request->view的值?

【问题讨论】:

  • 在这种情况下你可以使用->whereIn()

标签: php laravel


【解决方案1】:

在你的情况下不需要使用orWhere()。你可以使用whereIn()

if($request->view != '') {
    $query->whereIn('type', [$request->view, 2])
}

【讨论】:

    【解决方案2】:

    使用use将其添加到范围

    if($request->view != '') {
        $query->where(function ($query) use ($request) {
            $query->where('type', $request->view)
                ->orWhere('type', 2);
        })->get();
    }
    

    【讨论】:

      【解决方案3】:
      if($request->view != '') {
          $query->where(function ($query) use ($request) {
          $query->where('type', $request->view)
                  ->orWhere('type', 2);
          })->get();
      }
      

      【讨论】:

        【解决方案4】:

        您没有将$request 变量传递给匿名函数。看看PHP documentation

        为了使您的代码正常工作,您必须进行如下更改:

        if($request->view != '') {
            $query->where(function ($query) use($request) { // <-- without use, your 
              $query->where('type', $request->view)         //     anonymous function
                    ->orWhere('type', 2);                   //     cannot access $request
            })->get();
        }
        

        【讨论】:

        • ($request-&gt;view != '') 可能只是 (!$request-&gt;view)
        • 不是真的...他正在检查view 变量是否为非空字符串,因此(!$request-&gt;view) 将给出完全不同的结果...无论如何我我只是复制和粘贴代码...进行编辑它应该是($request-&gt;view !== '') 解释here
        猜你喜欢
        • 2021-11-17
        • 1970-01-01
        • 2020-08-03
        • 2019-06-15
        • 2020-05-08
        • 2014-07-31
        • 1970-01-01
        • 2019-10-12
        • 2016-12-28
        相关资源
        最近更新 更多