2016-07-12 16 views
1

Ich bin verwirrt mit dem CakePHP 2.x doc Model Association Also brauche ein wenig Hilfe hier, um zu verbinden und zu finden enthält im Ergebnis. enter image description hereCakePHP Multiple Model association

Deal Table > id | title 
DealAttribute Table (has options) > id | title 
DealAttributeOption Table (belongs to DealAttribute) > id | title | deal_attribute_id 
DealsDealAttributes Table > id | deal_id | deal_attribute_id | option_id 

Benötigen Sie führen wie

Deal [ 
    id, title 
    DealsDealAttributes [ 
     id, deal_id, deal_attribute_id, option_id 
     DealAttribute [ 
      title 
     ] 
     DealAttributeOption [ 
      title 
     ] 
    ] 
] 

ich mit $hasAndBelongsToMany mit $belongsTo und auch versucht, in DealsDealAttributes aller drei Deal, DealAttribute, DealAttributeOption aber nicht bekommen, das enthält. Jetzt möchte ich, wenn ich einen Deal dann alle zugehörigen Modelle finden wird enthält. Wie richte ich die Assoziation Models ein?

+0

haben Sie beide $ hasMany und $ belongsTo Beziehungen definiert jeweiliges Modell? oder verwirrst du das? Wenn Sie die cake.php-Konvention zum Erstellen von Tabellen befolgen, können Sie auch Modellbeziehungen zum Kuchenbacken hinzufügen. –

+0

Es wäre hilfreich, Ihren vorhandenen Code für die Assoziationen zu sehen, um zu sehen, was Sie bisher versucht haben. Im Grunde hat das Modell für die Tabelle, die einen Fremdschlüssel enthält, eine 'gehörtTo'-Beziehung, während ein Modell, das einer anderen Tabelle zugeordnet ist, die den Fremdschlüssel enthält, eine 'hasOne'- oder' hasMany'-Beziehung ist. – drmonkeyninja

+0

@drmonkeyninja Ich habe es auf viele Arten versucht, aber niemand arbeitet so bin ich verwirrt Kannst du mir die richtige Richtung zeigen? – Anupal

Antwort

0

Es sieht aus wie Ihr Modell Verbände sollen bis etwa wie folgt festgelegt werden: -

class Deal extends AppModel { 

    public $belongsTo = [ 
     'User' 
    ]; 

    public $hasMany = [ 
     'DealsDealAttribute' 
    ]; 

} 

class DealsDealAttribute extends AppModel { 

    public $belongsTo = [ 
     'Deal', 
     'DealAttribute', 
     'DealAttributeOption' => [ 
      // Foreign key breaks naming convention so needs setting manually 
      'foreignKey' => 'option_id' 
     ] 
    ]; 

} 

class DealAttribute extends AppModel { 

    public $belongsTo = [ 
     'User' 
    ]; 

    public $hasMany = [ 
     'DealsDealAttribute' 
    ]; 

} 

class DealAttributeOption extends AppModel { 

    public $hasMany = [ 
     'DealsDealAttribute' 
    ]; 

} 

Sie den Fremdschlüssel für den DealAttributeOption Verein im DealsDealAttribute Modell festlegen müssen, wie Sie von CakePHP Namensgebung gebrochen haben Konvention (es sollte idealerweise deal_attribute_option_id sein).

aktualisieren

Dann einen Deal mit den dazugehörigen Datensätze abzurufen Sie contain verwenden können, die entsprechenden Modelle wie diese abzurufen: -

$result = $this->Deal->find('first', [ 
    'contain' => [ 
     'DealsDealAttribute' => [ 
      'DealAttribute', 
      'DealAttributeOption' 
     ] 
    ], 
    'conditions' => [ 
     'Deal.id' => $id 
    ] 
]); 
+0

Ich habe das gleiche gemacht, aber wenn ich Deal finde, dann kommt nur 'DealsDealAttribute' nicht zusammen. – Anupal

+0

Was tun Sie, um die Daten abzurufen? Es klingt, als wäre deine Suchanfrage falsch! – drmonkeyninja

+0

'$ result = $ this-> Deal-> findById ($ id);' So finde ich den Deal im Controller. – Anupal