2009-07-23 10 views
0

これらの「PHPフレームワーク」が私の自由な時間にあるのを見てみたいので、初心者の質問かもしれません。CakePHP HABTM質問

複数の写真に複数のタグを追加したいと思います。私はタグモデルとモトモデル(写真)を持っています。 MOTモデルのスニップ:

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

私のタグには、コントローラの追加()I持っている:私は見

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

print_r'ingます$ this->データ:

Array 

( [Mot] =>配列 ( [id] => 2 )

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

タグは、タグテーブルに挿入されますが、何もmottagsに挿入されません(theresのはMOTとタグの間で下線が、私が代わりにアンダースコア)テーブルになる、ここでそれを書くときには、イタリック体。マイmots_tagsのDBスキーマ:(sqliteの)

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

ケーキのみのタグテーブルにはなくassociacionsテーブルに書き込み、なぜ任意の手がかり?私はSQLエラーを取得しません。アソシエーションのテーブルに書き込むかどうかを確認する方法はありますか?

さて、あなたは間違いなくsaveAll()が必要になります。

答えて

2

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

編集をお試しください。さらに、接続されたHABTMモデルの配列は、少し奇妙な形式である必要があります。正しく覚えていれば、次のようになります。

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

同じ - 何がmots_tagsに行きません。エラーなし、タグはタグテーブルに到達します。 – jpou

0

自分で解決策を見つけました。

Mot'sには多くのタグがあり、タグには多くのMotsがあり、タグの追加はmotsコントローラではなくタグコントローラによって処理されるため、タグモデルには$ hasAndBelongsToManyも含まれている必要があります。 、MOTのモデルと同じだけのタグ(複数可)に置換BUの名言(S)と:

これは、MOTのモデルだけではなく、また、タグのモデルにされている必要があります。

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