2009-10-02 5 views
0

j'obtiens une erreur à mon avis:problème avec CakePHP en utilisant autoModel quand il ne doit pas

Warning (512): SQL Error: 1054: Unknown column 'Model.id' in 'where clause' [CORE\cake\libs\model\datasources\dbo_source.php, line 525] $sql = "SELECT Model . model_id , Model . pic_location , Model . model_name FROM models AS Model WHERE Model . id = '20' LIMIT 1" $error = "1054: Unknown column 'Model.id' in 'where clause'" $out = null

Mon modèle est malheureusement nommé « modèle », en raison de la base de données existante, je travaille avec. J'ai utilisé le débogage et ai déterminé qu'il utilise primaryKey de 'id' (comme également montré dans le SQL ci-dessus), en dépit de mon code de modèle (voir ci-dessous) plaçant explicitement le primaryKey à 'model_id'.

La table de base de données est constituée de modèles avec une clé primaire de model_id, donc je ne peux que supposer que le système utilise un modèle automatique.

Mon code modèle est « model.php »:

<?php class Model extends AppModel { 

var $name = 'Model'; 
var $primaryKey = 'model_id'; 

//The Associations below have been created with all possible keys, those that are not needed can be removed 
var $hasMany = array(
    'Pic' => array(
     'className' => 'Pic', 
     'foreignKey' => 'model_name', 
     'dependent' => false, 
     'conditions' => '', 
     'fields' => '', 
     'order' => '', 
     'limit' => '', 
     'offset' => '', 
     'exclusive' => '', 
     'finderQuery' => '', 
     'counterQuery' => '' 
    ) 
);}?> 

J'ai créé à l'origine de la main, et quand je frappe cette erreur, je cuire au four ... avec des résultats identiques (sauf que je ne l'ai pas inclure les champs vides dans la relation hasMany).

J'ai désactivé temporairement la mise en cache de l'application et j'ai effacé le cache, mais rien n'y fait. Comment puis-je utiliser mon code de modèle?

Répondre

4

Je crains que vous deviez renommer votre modèle Model en quelque chose d'autre. Votre classe Model étend AppModel, qui à son tour étend la classe de modèle de base, qui est également appelée Model. Vous allez avoir des ennuis de cette façon.

Si vous avez une base de données existante, juste définir la $useTable attribute d'utiliser une table avec un nom différent de votre modèle.

+0

Je pensais que ce pourrait être le cas, mais était pas sûr. Ont fait cela et il l'a réparé. Merci. –

Questions connexes