【问题标题】:Laravel/Eloquent Paginate returning empty collection when filtering on primary keyLaravel/Eloquent Paginate 在过滤主键时返回空集合
【发布时间】:2017-01-05 20:06:41
【问题描述】:

我正在为客户创建一个允许多个选项的搜索表单,包括客户的 ID(主键)。

$res = new \App\Customer;

当过滤不是主键的列时,一切正常:

>>> $res = \App\Customer::where('customer_name', 'like', "%frank%")->first();
=> App\Customer {#736}
>>> $res = \App\Customer::where('customer_name', 'like', "%frank%")->paginate(15)->first();
=> App\Customer {#749}

但是,过滤主键然后调用 paginate() 会返回一个空集合。

>>> $res = \App\Customer::where('id', 3)->first();
=> App\Customer {#669}
>>> $res = \App\Customer::where('id', 3)->paginate(15)->first();
=> null

simplePaginate() 工作正常,但是我想使用完整的paginate() 中的附加功能。

(是的,我知道在过滤主键时我只会得到一条记录,但是如果没有在集合上调用 paginate(),我的视图会中断,因为它使用诸如 firstItem()、@ 之类的分页方法987654329@、total()等)

【问题讨论】:

  • 我刚刚在 v5.3.4 上尝试过,没有任何问题。你确定你没有做任何其他事情吗?
  • 没有别的了,上面的输出直接来自 tinker。我什至创建了一个只有空模型的新项目并获得完全相同的输出。在 v5.3.2 上,刚刚更新到 v5.3.4 - 结果相同。

标签: php laravel pagination eloquent laravel-5.3


【解决方案1】:

我不确定它为什么会起作用,但是将我的 where 移到 Model 的范围方法中解决了这个问题。

【讨论】:

    【解决方案2】:

    试试:

    $res = \App\Customer::where('id', 3)->paginate(15);

    【讨论】:

    • 这与我上面的代码相同。我刚刚添加了 ->first() 来提取返回的第一条记录以用于测试目的。
    猜你喜欢
    • 2020-09-09
    • 1970-01-01
    • 2014-01-22
    • 2020-02-02
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多