2009-07-23 9 views
0

Könnte eine Newbie Frage sein, wie ich versuche zu sehen, was all diese "PHP-Frameworks" in meiner Freizeit sind.CakePHP HABTM Frage

Für den Anfang möchte ich mehrere Tags zu mehreren Fotos hinzufügen. Ich habe ein Tags-Modell und ein Mot-Modell (die Fotos). Snip von mot Modell:

var $hasAndBelongsToMany = array(
            'Tag' => 
            array(
             'className'    => 'Tag', 
             'joinTable'    => 'mots_tags', 
             'foreignKey'    => 'mot_id', 
             'associationForeignKey' => 'tag_id', 
             'unique'     => false 
            ) 
           ); 

In meinem Tags Controller in add() Ich habe:

$this->Tag->save($this->data); 

Wenn $ this- print_r'ing> Daten sehe ich:

Array 

( [Mot] => Array ( [id] => 2 )

[Tag] => Array 
    (
     [title] => 21e21e 
    ) 

)

Tag in Schlagwörter Tabelle eingefügt, aber wird nichts in mottags eingefügt (Theres unterstreicht zwischen mot und Tag, aber es kursiv, wenn ich es hier schreiben, anstatt ein Unterstrich) Tabelle zu werden. Mein mots_tags db Schema: (SQLite)

create table mots_tags (id INTEGER PRIMARY KEY, mot_id INTEGER, tag_id INTEGER) 

Irgendwelche Hinweise, warum Kuchen nur Schlagwörter Tabelle schreibt und nicht zu associacions Tisch? Ich bekomme keine SQL-Fehler. Gibt es eine Möglichkeit zu sehen, ob es überhaupt versucht, in Assoziationstabelle zu schreiben?

Antwort

2

Versuchen

$this->Tag->saveAll($this->data); 

Edit:

Nun, Sie auf jeden Fall saveAll() brauchen. Außerdem muss das Array des verbundenen HABTM-Modells in einem bestimmten, etwas kuriosen Format vorliegen. Wenn ich mich richtig erinnere, sollte es so aussehen:

array(
    'Tag' => array('title' => ...),   // primary model 
    'Mot' => array(      // connected HABTM model 
     'Mot' => array($id, $id, $id, ...) 
    ) 
); 
+0

Samt - Nichts geht zu mots_tags . Keine Fehler, Tag erreicht die Tag-Tabelle. – jpou

0

Ich habe eine Lösung gefunden.

Da Mot viele Tags haben kann, und Tags viele Mots haben können, und das Hinzufügen von Tags wird durch Tags Controller anstelle von mots Controller gehandhabt, muss das Tag-Modell auch $ hasAndBelongsToMany enthalten. Das gleiche wie in mot Modell, nur mit Tag (e) ersetzt bu Mot (s):

Dies sollte auch in mot Modell, nicht nur in Tag-Modell ist:

var $hasAndBelongsToMany = array(
    'Mot' => 
    array(
     'className'    => 'Mot', 
     'joinTable'    => 'mots_tags', 
     'foreignKey'    => 'tag_id', 
     'associationForeignKey' => 'mot_id', 
     'unique'     => false 
    ) 
);