【问题标题】:Laravel 5.1 Dynamic where / orWhereLaravel 5.1 动态 where / orWhere
【发布时间】:2015-11-19 10:18:59
【问题描述】:

我想像这样构建一个动态的 where / orWhere 语句。

$matchList = [ 'match1', 'match2', 'match3', 'match4' ];

$query->where('Column', 'Like', 'match1')
->orWhere('Column', 'Like', 'match2')
->orWhere('Column', 'Like', 'match3')
->orWhere('Column', 'Like', 'match4');

我尝试构建一个动态方法调用,但它不起作用...

 $matchList = [ 'match1', 'match2', 'match3', 'match4' ];

      $query->where('Column', 'Like', $hobbiesList[0]);

      if(count($matchList) > 1)
      {
          for($i = 1; $i < count($matchList); $i++)
          {
              $query->{orWhere('Column', 'Like', $matchList[$i])}();
          }
      }

问题是我有一个匹配列表,对于这个列表,我必须在 Larvel 5.1 中构建一个动态查询语句。

谁能帮助我或解释我的错误在哪里?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    如果你不需要使用通配符,那么你应该使用wherein:

    $query->whereIn('Column', $matchList);
    

    【讨论】:

      【解决方案2】:

      你不需要做任何复杂的事情,只需使用这个:

      for($i = 1; $i < count($matchList); $i++)
      {
        $query->orWhere('Column', 'Like', $matchList[$i]);
      }
      

      您也很可能希望使用"%".$matchList[$i]."%" 而不仅仅是$matchList[$i] 作为值。

      【讨论】:

      • 谢谢。我现在的问题是,我的结果包含 all 匹配项,但我希望我的结果只能包含匹配列表中的一个参数。
      • 您可以编辑问题并显示您得到的结果而不是您想要的结果吗?
      • 我是个白痴,一切正常……我的错。
      【解决方案3】:
      $result = $model->where(function($query) use($where,$tj){
                  foreach ($where as $wh){
                      if($tj==1){
                          $query->where($wh[0],$wh[1],$wh[2]);
                      }else {
                          $query->orWhere($wh[0], $wh[1], $wh[2]);
                      }
                  }
              })->orderBy($sort,$order)->offset($from)->limit($rows)->get();
      

      【讨论】:

        猜你喜欢
        • 2016-04-23
        • 1970-01-01
        • 1970-01-01
        • 2021-02-11
        • 1970-01-01
        • 2021-07-12
        • 2020-01-01
        • 2021-10-10
        • 1970-01-01
        相关资源
        最近更新 更多