【问题标题】:Adding where clause dynamically to a query with pagination in Laravel在 Laravel 中将 where 子句动态添加到带有分页的查询中
【发布时间】:2014-05-01 01:05:55
【问题描述】:

我有一个项目列表,我希望能够使用视图中的一些按钮进行过滤(显示,哪些是活动的,只显示以某个字母开头的,等等),我正在为每种可能的组合,一旦我有超过 3 个按钮要过滤,就会失控。

所以我想根据按下的按钮在我的初始查询中添加一个 where 子句,但到目前为止我没有工作,我不知道它是否是分页:

(这是一个只有一个按钮的示例,我稍后会添加更多条件,但这还不行)。

public function index()
{
    $hostesses = Hostess::orderBy('lastname', 'asc')
                ->paginate(30);

    if (Input::has('l')){
        $hostesses->where('lastname', 'like', Input::get('l').'%');
    }

    $this->layout->content = View::make('hostesses.index', compact('hostesses'));
}

我在视图中收到此错误:

ErrorException

call_user_func_array() expects parameter 1 to be a valid callback, class 'Illuminate\Support\Collection' does not have a method 'where'

【问题讨论】:

  • 您可能需要在分页调用之前执行此操作。
  • 是的,就像 Jessica 提到的那样,您可能需要将 if 语句放在 ->paginate 之前。这样你也可能会遇到错误,然后我建议连接我认为可行的变量。

标签: php laravel laravel-4


【解决方案1】:
$hostesses = Hostess::orderBy('lastname', 'asc');

if (Input::has('l')){
    $hostesses->where('lastname', 'like', Input::get('l').'%');
}

$results = $hostessess->paginate(30);

类似的东西?

【讨论】:

  • 是的,就是这样,我以为我添加了错误的逻辑,但它只是分页。我会尽快接受答案。
  • 这行不通。您必须将$hostesses->where('lastname', 'like', Input::get('l').'%'); 更改为$hostesses = $hostesses->where('lastname', 'like', Input::get('l').'%');
  • 我对此表示怀疑,看起来他们正在使用允许方法链接的流体接口,并且 OP 说它有效。
  • 在该示例中,他们没有像在 OP 的示例中那样静态调用该类。我对 Eloquent 一点也不熟悉,但在你链接到的帖子中,那个人能够在没有分配的情况下调用 ->where()。
猜你喜欢
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-27
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
相关资源
最近更新 更多