2012-04-08 7 views
1

In meiner Anwendung habe ich die folgenden Tabellen:Einrichtung enthält eine Join-Tabelle in CakePHP

Posts 
id 
title 
content 
    Users 
id 
username 
password 
    Profiles 
id 
user_id 
firstname 
lastname 
    Comments 
id 
post_id 
user_id 
content 
    Topics 
id 
title 
    Topic_Posts 
id 
topic_id 
post_id 

Hoffentlich werden die Beziehungen sind ziemlich offensichtlich! Das Problem, das ich habe, ist, dass die letzte Tabelle eine Join-Tabelle für die Viele-zu-viele-Beziehung zwischen Posts und Topics ist. Ich bin mir nicht ganz sicher, wie ich das einrichten soll!

Hier ist meine Modelle für Beiträge, Themen und Topics_Posts:

class Post extends AppModel 
{ 
    public $name = 'Post'; 

    public $belongsTo = 'User'; 

    public $hasMany = array('Comment', 'TopicPost'); 

    public $actsAs = array('Containable'); 
} 
class Topic extends AppModel 
{ 
    public $hasMany = array(
     'TopicPost' 
    ); 
} 
class TopicPost extends AppModel { 
    public $belongsTo = array(
     'Topic', 'Post' 
    ); 
} 

Soweit ich die Beziehungen korrekt sind sagen? Und dann in meiner Methode habe ich die folgende Erklärung ab:

$post = $this->Post->find('first', 
      array('contain'=> 
      array(
       'Comment'=>array('User'=>array('Profile')), 
       'User'=>array('Comment','Profile') 
      ), 
      'conditions'=>array('Post.id'=>$id))); 

Also im Grunde meiner Frage ist, wie das Thema der hinzufügen enthalten, da ich nicht den Kommentar und Benutzer des Post-Modell hinzufügen musste so nicht sicher, Warum oder was als nächstes zu tun ...

Auch wie würde ich die Themen wieder herausziehen? Wie ich bin verwirrt, wie dies funktioniert, wenn ich beziehe, bin ich auf die Join-Tabelle statt die eigentlichen Themen verlinken ... Es sei denn, ich bin nur weg von der Spur. Hilfe dazu wäre willkommen.

Antwort

2

Mit Ihnen aktuelle Setup können Sie dies tun:

'contain' => array(
    'TopicPost' => array('Topic') 
) 

Oder Sie können

public $hasAndBelongsToMany = array(
    'Topic' => array('with' => 'TopicPost') 
); 

zum Post Modell hinzuzufügen.

Und dann enthalten Ihr wie folgt aussehen:

'contain' => array(
    'Topic' 
) 
+0

Ehrfürchtig funktioniert super. – Cameron