J'ai posé cette question sur le groupe Google CakePHP mais je n'ai trouvé aucune solution, j'espère donc avoir plus de chance ici.

J'ai développé un peu sur CakePHP et j'ai décidé d'avoir une version localhost sur MAMP afin que je puisse faire une démonstration de mon application aux gens sans être dépendant 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 au sein d'une fonction pour supprimer toute cette logique du contrôleur. Par conséquent, à partir du contrôleur, nous aurons quelque chose comme

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

, qui va au modèle user.php et exécute cette fonction. Cela fonctionne bien sur nos sites live et de développement, mais pour une raison quelconque sur MAMP, je reçois une erreur chaque fois que ce type d'appel est effectué, à titre d'exemple de l'un des appels :

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 webroot 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

0
828 22 oct. 2009 à 00:57

2 réponses

Meilleure réponse

Trouvé une solution. Cela n'a rien à voir avec MAMP, en fait nous avons finalement trouvé ce bug sur notre serveur de développement, mais pas sur notre serveur live.

Fondamentalement, les noyaux de Cake étaient différents sur les deux serveurs - mais minutieusement (l'un était RC, l'autre était le final). L'ancien était capable d'interpréter la relation du modèle HABTM, mais les nouveaux noyaux ne le font pas à moins que vous ne les spécifiiez explicitement (ce doit être un bogue puisque j'ai suivi toutes les conventions de nommage).

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 de même 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)

0
828 26 oct. 2009 à 20:35

Que se passe-t-il si vous forcez 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.

0
timdev 22 oct. 2009 à 01:15
La requête à l'intérieur de la fonction elle-même est très bien. Pour une raison quelconque, Cake interprète la fonction de modèle comme une fonction MySQL
 – 
828
26 oct. 2009 à 17:27