2011-06-07 2 views
6

On m'a dit que pour accomplir mapplication $ belongsTo à une clé non primaire, je mettrais la clé étrangère à false et définirais les conditions par quelqu'un sur un autre forum (IRC, en fait) . Cependant, je ne pense pas que je le fais correctement. Voici mon code belongsTo de $ Je tentais:

var $belongsTo = array(

    'Inventory' => array(
     'className' => 'Inventory', 
     'foreignKey' => false, 
     'conditions' => array('RentalLineitem.i_num' => 'Inventory.i_num'), 
     'dependent' => false 
    ) 

); 

Quand je regarde la requête SQL qui est généré, la clause ON dans la jointure est à la recherche de la valeur de chaîne au lieu de la colonne: `RentalLineitem`.` i_num` = 'Inventory.i_num' au lieu de ce dont j'ai besoin c'est `RentalLineitem`.` `i_num` =` Inventory`. `i_num`.

On m'a dit de changer le "juste changer le schéma de base de données" pour être correct. Toutefois, il s'agit d'une application héritée, la base de données existe déjà depuis 10 ans et d'autres applications utilisent cette base de données. Je dois travailler avec les tables que j'ai, et je ne peux pas changer le schéma.

Comment puis-je associer correctement ces modèles?

+0

Oui, cela ne semble pas être correct. Juste pour que je ne poste aucune hypothèse dans ma réponse, essayez-vous de relier le modèle 'Inventory' au modèle' RentalLineItem'? Je suppose que vous essayez de dire 'Inventory' appartient à' RentalLineItem'? – generalopinion

Répondre

11

hmm cela pourrait ne pas être la bonne façon, mais j'avais déjà des problèmes similaires et je l'ai corrigé en faisant quelque chose comme:

'conditions' => array(' `RentalLineitem`.`i_num` = `Inventory`.`i_num`'), 

espérons que cette aide,

Bonne chance

+0

c'était génial, ça marche très bien. Merci pour votre réponse. J'ai eu du mal avec cela, et les gens sur IRC viennent de me dénigrer à propos d'un schéma SQL sur lequel je n'avais aucun contrôle. Les gens devraient comprendre que parfois, en tant que développeurs, nous n'avons aucun contrôle sur les parties intégrantes de l'application. – stephenbayer

+2

Je me demande pourquoi cela ne fonctionne pas dans cakephp 2.2 ..? – neobie

0

Vous venez d'éditer dans des conditions comme celle-ci:

'conditions' => array(
    'RentalLineitem.i_num = Inventory.i_num', 
), 

Cela fonctionne corr ectly dans mon cas.

Questions connexes