2010-09-28 5 views
0

J'ai deux tables utilisateur et emplacementmodèle CakePHP relation

utilisateur id (primaire) et les champs de localisation/colonnes

emplacement est id (primaire) et la colonne de ville

maintenant Je souhaite relier les deux tables par user.location avec location.city Comment puis-je le faire considring ville n'est pas une clé primaire, mais est unique. J'utilise cakephp 1.2.

également dans une base MySQL puis-je relier/rejoindre les tables sans clé primaire, mais une clé unique

Répondre

1

Que ce soit dans le modèle ou à la volée de liaison, vous pouvez créer des jointures avec des clés non primaires comme suit

public $hasOne = array(
    'RelatedModel' => array(
     'className' => 'RelatedModel', 
     'foreignKey' => false, 
     'conditions' => array(
      '`MainModel`.`random_field` = `RelatedModel`.`some_field`' 
     ) 
    ) 
} 

l'astuce est mise foreignKey false si le gâteau ne cherche rien et fixant les conditions manualy, notez que les champs sont excaped et dans une chaîne comme quelque chose comme

'`MainModel`.`random_field`' => '`RelatedModel`.`some_field`' 

génèrerait

SELECT ..... FROM ... LEFT JOIN ... ON (`MainModel`.`random_field` = '`RelatedModel`.`some_field`') 

qui essaierait rejoindre les lignes qui == 'RelatedModel. some_field '(la chaîne réelle)

+0

l'essayer et qu'en est-il de mysql partie de ma question – aWebDeveloper

+1

Avez-vous essayé? Ne pensez-vous pas que si mysql ne pouvait pas faire cela je le dirais, au lieu de vous donner beaucoup de code. vous pouvez vous joindre à tout ce que vous aimez – dogmatic69

+0

merci pour la perspicacité – aWebDeveloper