Bonjour a tous,
Je suis en train de travailler sur une application contenant un CMS tres simple.
Mon application fonctionne sur mon serveur de developement, mais ne fonctionne pas sur un autre serveur, avec le même code et les mêmes données dans la base de données.
J'ai remarqué quelque chose de bizarre, sur mon serveur dev, ce code la:
$this->loadModel('User');
$users = $this->User->find('all');
debug($users);
me retourne un debug de cette forme:
/app/Controller/HomeController.php (line 28)
array(
(int) 0 => array(
'User' => array(
'password' => ' *****',
'id' => '1',
'username' => 'pierre',
...
Sur mon autre serveur, les données ne sont pas renvoyées de la même façon, et le même debug imprime ceci:
/app/Controller/HomeController.php (line 28)
array(
(int) 0 => array(
(int) 0 => array(
'password' => ' *****',
'id' => '1',
'username' => 'pierre',
...
Je suppose qu'il s'agit d'un paramètre dans la config qui est par défaut et ne prend pas la même valeur sur les deux serveurs, mais j'ai beau chercher, je ne trouve pas la raison, pour la quelle mon serveur de dév me renvoie les données dans un tableau de hash avec l'alias du modèle en clé (comportement attendu), et mon autre serveur n'utilise pas l'alias du modèle en clé des hashs.
Quelqu'un a déjà rencontré ce problème et aurait une solution? Le serveur renvoyé les données de manière erronée est celui qui devra être utilisé en production.
Pierre
Re-bonjour,
j'ai trouvé la raison de ce problème, ainsi qu'une solution "utilisable".
La version du driver pdo_mysql sur le second serveur est ancienne, et ne renvoie pas le nom des tables dans les set de résultats.
La "bonne" solution serait donc de mettre a jour pdo, cependant, c'est sur un hébergeur mutualisé, et la version de pdo est fixée.
Il faut donc redéfinir une source de donnée, qui réencapsule les données correctement pour être utilisable dans cakePHP.
Je suis parti de ca, sur git hub:
https://github.com/lorenzo/HipHop/blob/ … pMysql.php
Cette solution n'est pas idéale, mais elle a le mérite de fonctionner, sans avoir a upgrader pdo.
Pierre