【问题标题】:Where clause as variable in LaravelLaravel 中的 where 子句作为变量
【发布时间】:2015-01-30 21:46:06
【问题描述】:

我正在尝试在 Laravel 4 中创建一个更高级的查询,它由 AND 和 OR where 子句组成,格式如下:

(('a','=','1') OR ('b','=','s') OR ('c','=','3')) AND (('d','=','1') OR ('e','=','s') OR ('f','=','3'))

问题是我正在动态生成这些查询,基于用户通过某些表单应用的某些过滤器。这意味着查询可以具有以下格式:

a AND b

还有这种格式:

(a OR b OR c) AND (d OR e OR f)

还有这个:

(a OR b) AND c AND (d OR e) AND f

我将 where 子句生成为字符串,但我无法将此变量添加到方法调用中。

例子:

$whereclause = where(function($query){$query->where('colorgrade','like','41-2');})->where(function($query){$query->where('datetime','>','2014-11-05');})

$result = $gin->bales()->$whereclause->take(1000)->get();

我得到的错误如下:

未定义属性:Illuminate\Database\Eloquent\Relations\HasMany::$where(function($query){$query->where('colorgrade','like','41-2');})- >where(function($query){$query->where('datetime','>','2014-11-05');})

如何将生成的 where 子句(字符串变量)传递给上述链接函数?

【问题讨论】:

    标签: php laravel laravel-4 where


    【解决方案1】:

    要即时创建查询,使用 Eloquent Query Scopes 是一个好主意。 这为您提供了一种基于表单选项等构建不同查询的方法。

    http://laravel.com/docs/4.2/eloquent#query-scopes

    【讨论】:

      【解决方案2】:

      您也许可以这样做,但是我有一种预感,这不适用于变量中的闭包和链式方法。见http://php.net/manual/en/functions.variable-functions.php

      $result = $gin->bales()->$whereclause()->take(1000)->get();
      

      或者,您可以拆分查询,这样它就不会全部在一行中完成。

      // Get the initial Query Builder instance
      $query = $gin->bales();
      
      $query->where(function($query) {
          $query->where('colorgrade', 'like', '41-2');
      });
      
      if ($something === 'something') {
          $query->where('something', $something);
      } else {
          $query->where('something', 'something_else');
      }
      
      // Finally get our results
      $results = $query->take(1000)->get();
      

      【讨论】:

        猜你喜欢
        • 2019-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多