Вопрос

Я задал этот вопрос в 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 жалуется на синтаксис.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top