繁体   English   中英

为什么CakePHP在MySQL查询中使用此方法名称而不返回结果?

[英]Why does CakePHP use this method name in a MySQL query rather than return the result?

在应用上一个问题的答案时,我尝试覆盖CakePHP的内置分页方法之一:

function paginateCount($conditions = null, $recursive = 0, $extra = array()) {
    if (isset($extra['group'])) {
        for ($i=0; $i<count($extra['group']);$i++) {
            if (strpos(strtolower($extra['group'][$i]),'having')!==false) unset($extra['group'][$i]);
        }
        exit();
    }
    $count = parent::paginateCount($conditions, $recursive, $extra);
    return $count;
}

问题在于,这似乎导致Cake进行仅由方法名称组成的MySQL查询。 显然,这不起作用并引发错误:

SQL错误:1064:您的SQL语法有错误; 检查与您的MySQL服务器版本相对应的手册,以在第1行的'paginateCount'附近使用正确的语法

由于启用了调试功能,因此可以看到通常存在paginateCount()查询的位置:

1: SELECT COUNT(*) AS `count` FROM `tournaments` AS `Tournament` WHERE 1 = 1 

我得到:

1: paginateCount

我显然误解了PHP的继承运算符。 我的函数似乎正在返回被覆盖的函数的名称,而不是其值。

我怎样才能解决这个问题?

当CakePHP在模型或附加行为中找不到方法时,通常会发生这种情况。

然后,它将调用传递给数据源(希望它具有方法并知道该怎么做),这就是为什么会出现此错误的原因。

我会检查事物的外观(是正确模型中的方法,是因为文件命名不正确,Cake制作了自动模型等)

我已修复此问题,但并未真正解决我提出的问题。

而不是像上面的示例那样将调整后的参数向上传递,而是使用它们直接完成相同的工作:

return $this->find('count', compact($conditions, $recursive, $extra));

这可以正常工作,但不能解释导致我首先提出问题的奇怪行为。 我的猜测是Cake通过虚拟/“自动”方法正在做一些时髦的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM