【问题标题】:CakePHP limit of mysql is 20 without me setting it. How do i remove this limit?mysql 的 CakePHP 限制是 20 没有我设置它。如何取消此限制?
【发布时间】:2012-05-24 13:41:33
【问题描述】:

我有一个分页的 mysql 调用,看起来像这样:

$this->paginate['limit'] = 400;
$this->paginate['Word']= array('contain'=>"");
$wording = $this->paginate('Word');

结果是:

SELECT `Word`.`id`, `Word`.`special`, FROM `words` AS `Word` WHERE `Word`.`writing_translation_id` = 197 LIMIT 20

所以这个 20 的限制是从某个地方出现的,我找不到在哪里。我检查了控制器和模型,但找不到任何类似的东西。如您所见,我无法使用设置为 400 的特定限制来覆盖它;

问题出在哪里?

【问题讨论】:

    标签: mysql cakephp limit


    【解决方案1】:

    试试 $this->paginate['Word] = array('contain' => '', 'limit' => 400);

    【讨论】:

    • 谢谢,那行得通。你知道默认的 20 是从哪里来的吗?
    • @mgPePe:我认为默认值可能在PaginatorComponent 定义中定义。例如,请参见此处:phpkode.com/source/p/cakephp/cakephp-cakephp-ec45e4e/lib/Cake/…
    • 这是默认设置,因为您传递了错误的选项。所以它没有得到它,因为你必须将你的限制移动到模型特定的数组。
    【解决方案2】:

    虽然上述答案是正确的,但范围非常有限。当返回值超过 400 时会发生什么?将值设置为 999999999?这是不好的编程习惯。我们正在使用可以在纳秒内执行查询、操作数据和执行计算的机器。因此,我们应该在可能的情况下保持极高的精度。这绝对是其中一种情况。

    这个问题的一个非常非常简单的解决方案是运行一个快速的 find->('count') 如果“查看全部”的请求已经发出(大概是通过 $_GET参数),并将限制设置为此值。

    【讨论】:

    • 您能详细解释一下吗?我在搜索分页的“查看全部”选项时发现了这个问题,但我不明白如何实际实现您在 CakePHP 3.x 中所说的请求部分。
    • 您不应该使用分页器来查看所有或无限制查询。我的意思是实际上你不应该使用列出所有查询期间。但我离题了。听起来您需要“列表”查询。
    猜你喜欢
    • 1970-01-01
    • 2020-02-27
    • 2014-05-31
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2011-09-08
    相关资源
    最近更新 更多