Question

J'ai posé cette question sur le groupe google de CakePHP mais je n'ai trouvé aucune résolution, alors j'espère que nous aurons plus de chance ici.

J'ai développé CakePHP pendant un moment et j'ai décidé de créer un version localhost sur MAMP afin que je puisse faire la démonstration de mon application auprès des personnes sans dépendre d'une connexion Internet.

Nous avons quelques requêtes MySQL complexes en cours, et en utilisant

$this->query('SELECT...');

Nous les avons placés dans les modèles appropriés dans une fonction pour supprimer toute cette logique du contrôleur. Par conséquent, du contrôleur, nous aurons quelque chose comme

$this->Users->getMeSomething($variable);

, cela va à l'utilisateur.php modèle et exécute cette fonction. Cela fonctionne bien sur notre live et dev sites, mais pour une raison quelconque sur MAMP, une erreur se produit à chaque fois que ce type d’appel est effectué, par exemple, l’un des appels suivants:

Erreur:

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]

Contexte:

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

La ligne 88 sur la racine Web est la suivante: $ Dispatcher- > dispatch ($ url);

J'ai essayé les versions 1.2 et 1.2.5 de CakePHP. MySQL sur MAMP est 5.1.31 et sur mon hôte, MediaTemple, est 5.1.26-rc

Merci pour toute aide

Était-ce utile?

La solution 2

Vous avez trouvé une solution. Cela n’a rien à voir avec MAMP. En fait, nous avons finalement trouvé ce bogue sur notre serveur de développement, mais pas sur notre serveur actif.

En gros, le noyau de Cake était différent sur les deux serveurs - mais de manière minutieuse (l’un était RC, l’autre était la finale). L'ancien était capable d'interpréter la relation de modèle HABTM, mais le noyau le plus récent ne le fait pas, sauf si vous le spécifiez explicitement (il doit s'agir d'un bogue puisque j'ai suivi toutes les conventions de dénomination).

Alors, voici comment cela fonctionnera: - vous avez un modèle user.php et tag.php - Dans user.php, vous aurez une relation HABTM avec le modèle Tag. - Dans ce tableau, ajoutez le champ: 'with' = = > 'UsersTag' - Faites la même chose pour tag.php

De cette façon, CakePHP n'a pas à déterminer le nom du modèle (bien qu'il devrait pouvoir le faire)

Autres conseils

Que se passe-t-il si vous obligez cake à faire écho à la requête et que vous essayez de l'exécuter manuellement dans un client mySQL? Il semble que votre version locale crée une requête différente de celle de votre hôte, car mySQL se plaint de la syntaxe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top