J'ai une application CakePHP qui est déplacée de SQLq à Sql Server. Il y a une requête qui ne semble pas transférer correctement:CakePHP - La requête générée ne fonctionne pas correctement avec SQL Server
$this->Model->find('all', array(
'conditions' => array(
'Model.column' => array(1, 2, 3)
)
)
);
Lorsque j'utilise cette syntaxe avec MySQL, il semble « déballer » le tableau correctement, et la requête générée est quelque chose comme
" ... OU 'Model.column' IN (1, 2, 3) ... "
Lors de l'utilisation de serveur SQL, la requête est générée
" ... OU 'Model.column' IN 'Array' "...
qui génère évidemment une erreur. J'ai posté cette question sur le groupe Google CakePHP hier, mais je n'ai pas reçu de réponse, alors j'ai pensé que j'essaierais SO. Si quelqu'un a des idées/suggestions, je l'apprécierais.
simple ajout: Il est exact que le ' 'Array'' semble être un tableau automatique à chaîne cast effectué par PHP. Il * devrait * lancer un AVIS s'il le fait. Cela * devrait * aider à trouver * où * le casting est en cours. – deceze
Je suis désolé que je n'étais pas clair, mais il n'y a pas deux installations de gâteau. Mon application a été développée en utilisant MySQL comme DB, mais maintenant la direction veut utiliser SQL Server, donc j'essaye de déboguer toutes les incohérences dans les requêtes générées. J'utilise 1.2.6 sur une machine Linux. Je ne vois rien dans cake/libs/model/datasources/dbo/dbo_mssql.php qui remplacerait le comportement par défaut, donc je vais essayer de trouver plus d'informations sur l'endroit exact où la distribution est faite. –
Je reviens juste pour voir si vous aviez fait des progrès. Je suppose que c'est même la même machine donc la version PHP serait la même. PHP et débogueurs peuvent être une douleur. Un moyen facile de tracer le code serait d'éditer dbo_mssql.php et trouver: fonction _execute ($ sql) { return mssql_query ($ sql, $ this-> connexion); } et remplacez-le par: function _execute ($ sql) { $ this-> log (debug_backtrace()); return mssql_query ($ sql, $ this-> connexion); } Il va vider beaucoup de données dans votre journal, mais vous obtiendrez beaucoup d'informations d'état. –