MAMP и CakePHP вызывают проблему с моделью
Вопрос
Я задал этот вопрос в google-группе CakePHP, но не нашел никакого решения, так что, надеюсь, здесь мне повезет больше.
Я немного занимался разработкой на CakePHP и решил установить версию localhost на 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-> отправка($url);
Я пробовал как 1.2, так и 1.2.5 CakePHP.MySQL на MAMP равен 5.1.31, а на моем хостинге MediaTemple равен 5.1.26-rc
Спасибо за любую помощь
Решение 2
Нашел решение.Это не имеет никакого отношения к MAMP, на самом деле, в конце концов, мы обнаружили эту ошибку на нашем сервере разработки, но не на нашем реальном сервере.
По сути, ядро Cake core отличалось на обоих серверах - но в мельчайших деталях (один был RC, другой - final).Более старая версия была способна интерпретировать отношения модели HABTM, но более новые ядра этого не делают, если вы явно не укажете их (это, должно быть, ошибка, поскольку я следовал всем соглашениям об именовании).
Итак, вот как это будет работать:- у вас есть модель user.php и tag.php - В user.php у вас будет связь HABTM с моделью тега - В этом массиве добавьте поле:'with' => 'UsersTag' - Сделайте то же самое для tag.php
Таким образом, CakePHP не нужно выяснять, каково название модели (хотя это должно быть возможно)
Другие советы
Что произойдет, если вы заставите cake повторить запрос и попытаетесь запустить его вручную в клиенте MySQL?Похоже, что ваша локальная версия создает запрос, отличный от версии на вашем хосте, поскольку MySQL жалуется на синтаксис.