2011-09-28 58 views
1

在从a previous question应用的答案,我试图重写的一个CakePHP的内置分页方法:为什么CakePHP在MySQL查询中使用此方法名称而不是返回结果?

的问题是,这似乎导致蛋糕做一个MySQL查询由该方法的名称简单地。显然,这并不工作,并抛出一个错误:

SQL Error: 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'paginateCount' at line 1

既然我已经启用调试,我可以看到,那里通常是paginateCount()查询:

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

我只是得到:

1: paginateCount 

我明显误解了PHP的继承操作符。我的函数似乎是返回它重写的函数的名称,而不是它的值。

我该如何解决这个问题?

+0

你检查代码,以确保母体:: paginateCount( )不是不能扩展的最终方法,并且您是否确保将您的类设置为扩展父类? – AlienWebguy

+0

是的,在CakePHP中,所有的模型都扩展了一个App Model,它扩展了一个基本的Model类。这个用例推荐使用扩展和重写:http://book.cakephp.org/view/249/Custom-Query-Pagination这只是使用parent :: paginateCount(),它似乎是非标准的。 –

+3

当CakePHP无法在模型或附加行为中找到该方法时,通常会发生这种情况。然后它将调用传递给数据源(希望它有方法并知道该怎么做),这就是为什么你会得到这个错误。我会检查他们看起来是什么东西(是在正确的模型中的方法,是蛋糕制作automodel,因为不正确的文件更新等) – deizel

回答

1

这通常发生在CakePHP无法在模型或附加行为中找到该方法时。

然后它将调用传递给数据源(希望它有方法并知道该怎么做),这就是为什么你会得到这个错误。

我会检查的事情是,他们似乎什么(是正确的模型的方法,在蛋糕的制作因为不正确的文件命名的automodel等)

0

我已经解决了这个问题,但没有真正解决我问的问题。

而不是通过调整参数链向上,因为我想在我上面的例子做,我用它们来直接做同样的工作:

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

该工程确定,但不解释导致我首先提出问题的奇怪行为。我的猜测是Cake使用虚拟/“自动”方法做了一些有趣的事情。

+0

Deizel评论对发生的事情非常准确。但奇怪的是,它没有找到函数,因为你的是一个覆盖:S find('count')是这个函数做什么。你可以尝试考虑这个paginateCount()以获得更准确的结果[url = http://www.mainelydesign.com/blog/view/best-paginatecount-cakephp-with-group-by-support] – api55

+0

感谢api55,deizel。这是我一直在削弱的那些问题之一。所有的输入都有帮助! –

相关问题