Почему CakePHP использует это имя метода в запросе MySQL, а не возвращает результат? - PullRequest
1 голос
/ 28 сентября 2011

Применяя ответ от предыдущего вопроса , я попытался переопределить один из встроенных в 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, для правильного синтаксиса, чтобы использовать около 'paginateCount' в строке 1

Поскольку у меня включена отладка, я вижу, что там, где обычно будет запрос paginateCount ():

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

Я просто получаю:

1: paginateCount

Я явно неправильно понял операторы наследования PHP. Кажется, моя функция возвращает имя переопределяемой функции, а не ее значение.

Как я могу это исправить?

Ответы [ 2 ]

1 голос
/ 03 октября 2011

Это обычно происходит, когда CakePHP не может найти метод в модели или прикрепленном поведении.

Затем он передает вызов источнику данных (надеясь, что у него есть метод и знает, что делать), и именно поэтому вы получаете эту ошибку.

Я бы проверил, являются ли вещи такими, какими они кажутся (это метод в правильной модели, Cake делает автомодель из-за неправильного именования файлов и т. Д.)

0 голосов
/ 28 сентября 2011

Я исправил это без реального решения вопроса, который я задал.

Вместо передачи скорректированных параметров вверх по цепочке, как я хотел сделать в моем примере выше, я использовал их для выполнения той же самой работы напрямую:

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

Это работает нормально, но не объясняет странное поведение, которое заставило меня сначала задать вопрос. Я предполагаю, что Cake делает что-то классное с виртуальными / "автоматическими" методами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...