簡體   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