Я задал этот вопрос в google-группе CakePHP, но не нашел никакого разрешения, поэтому, надеюсь, вам повезет больше.
Я немного развился на CakePHP и решил localhost version на MAMP, чтобы я мог демонстрацию своего приложения для людей без зависимости от интернет-соединения.
У нас есть пара сложных запросов MySQL, и с помощью
$this->query('SELECT...');
Мы поместили их в соответствующие модели внутри функции, чтобы удалить всю эту логику с контроллера. Следовательно, из контроллера мы будем иметь что-то вроде
$this->Users->getMeSomething($variable);
который отправляется на user.php модели и запускает эту функцию. Это отлично работает на нашем live и dev сайтов, но по какой-то причине в MAMP я получаю сообщение об ошибке при каждом вызове этого типа вызова в качестве примера одного из вызовов:
Ошибка:
Warning (512): 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 '__getUsersForUsers' at line 1 [CORE/cake/
libs/model/datasources/dbo_source.php, line 525]
Контекст:
DboSource::showQuery() - CORE/cake/libs/model/datasources/
dbo_source.php, line 525
DboSource::execute() - CORE/cake/libs/model/datasources/
dbo_source.php, line 201
DboSource::fetchAll() - CORE/cake/libs/model/datasources/
dbo_source.php, line 336
DboSource::query() - CORE/cake/libs/model/datasources/dbo_source.php,
line 297
Model::call__() - CORE/cake/libs/model/model.php, line 441
Overloadable::__call() - CORE/cake/libs/overloadable_php5.php, line 52
AppModel::__getUsersForUsers() - [internal], line ??
UsersController::view() - APP/controllers/users_controller.php, line
401
Object::dispatchMethod() - CORE/cake/libs/object.php, line 118
Dispatcher::_invoke() - CORE/cake/dispatcher.php, line 227
Dispatcher::dispatch() - CORE/cake/dispatcher.php, line 194
[main] - APP/webroot/index.php, line 88
Строка 88 на webroot такова: $Dispatcher- > dispatch ($ url);
Я пробовал как 1.2, так и 1.2.5 CakePHP. MySQL на MAMP - 5.1.31, а на моем хосте MediaTemple - 5.1.26-rc
Спасибо за любую помощь
Найден решение. Это не имеет никакого отношения к MAMP, на самом деле мы нашли эту ошибку на нашем dev-сервере в конце концов, но не наш живой сервер.
В принципе, ядро Cake было разным на обоих серверах - но это было так (один был RC, другой был последним). Более старая была способна интерпретировать отношения модели HABTM, но новое ядро не следует, если вы явно не указали их (это должно быть ошибкой, поскольку я следил за всеми соглашениями об именах).
Итак, вот как это будет работать: - у вас есть модель user.php и tag.php - В user.php у вас будет отношение HABTM к модели Tag - В этом массиве добавьте поле: 'with' = > 'UsersTag' - Сделайте то же самое для tag.php
Таким образом, CakePHP не должен определять, что такое имя модели (хотя оно должно быть в состоянии)
Что произойдет, если вы заставите торт эхом выполнить запрос и попытаетесь запустить его вручную в mySQL-клиенте? Похоже, ваша локальная версия создает другой запрос, чем версия вашего хоста, поскольку mySQL жалуется на синтаксис.