2011-07-13 18 views
1

HABTM結合テーブルの追加フィールドを更新する(更新しない方がよい)問題があります。私はGoogleや他の情報源を検索しましたが、今は4日間苦労しています。HABTM結合テーブルのCakePHP更新追加フィールド

class Tutorial extends AppModel { 
    var $hasAndBelongsToMany = array(
    'TutorialCategory' => array(
     'with' => 'TutorialCategoriesTutorial', 
     'order' => 'TutorialCategoriesTutorial.order_by ASC', 
     'unique' => true, 
); 
} 

class TutorialCategory extends AppModel { 
    var $hasAndBelongsToMany = array(
    'Tutorial' => array(
     'with' => 'TutorialCategoriesTutorial', 
     'unique' => true, 
); 
} 

は、ID、tutorial_id、tutorial_category_id、ORDER_BYフィールドを持つtutorial_categories_tutorialテーブルに参加:

は私がモデルを持っています。以下のような私はORDER_BYフィールドを更新しようとしています

$order = 1; 
foreach($tutorials as $i => $tutorial) { 
    $this->data[$i]['Tutorial']['id'] = $tutorial['Tutorial']['id]; 
    $this->data[$i]['TutorialCategory']['id'] = $tutorial['TutorialCategory']['id]; 
    $this->data[$i]['TutorialCategoriesTutorial']['order_by'] = $order; 

    ++$order; 
} 
$this->Tutorial->bindModel(array('hasMany' => array('TutorialCategoriesTutorial'))); 
$saved = $this->Tutorial->saveAll($this->data); 

これは削除してクレート新しいレコードを結合テーブルではなく、全くORDER_BY設定されていません。私はレコードを更新し、今すぐorder_byの値を設定したい。私は幸運を経ずに何度も試みました。

助けを借りて助言や説明をしてください。

ありがとうございました!

答えて

3

追加データ(注文フィールド)をHABTM結合モデルに追加したので、実際にはCakePHPとの単純なHABTM関係の機能を超えています。実際にセットアップする必要があるのはhasMany Through relationshipです。

あなたの場合は、基本的に、チュートリアルID、資材ID、および割り当てたいデータを「メンバーシップ」モデルにします。次に、relatioshipsをMembership belongsTo Tutorial &カテゴリとして定義します。この本はおそらく私が説明したものより良い例を持っています!

主な理由は、各メンバーシップレコードがHABTMビヘイビアが付加されていない通常のレコードとして扱われるため、レコードを個別に簡単に編集、削除、追加できるからです。

+0

ええ、私はそれを試しました。モデルTutorialCategoriesTutorialを作成し、belongsTo Tutorial(TutorialCategoriesTutorialが多数あります)とTutorialCategory(TutorialCategoriesTutorialが多数あります)を設定しました。しかしそれで運がない。なぜなら、これらのフィールドを更新するための$ this->データの作成方法を理解できないからです。私に例を挙げてもらえますか? – Orbitum

+0

'$ this-> data ['TutorialCategoryTutorial'] ['tutorial_id']'と '$ this-> TutorialCategoryTutorial-> save()'を使用するなど、他のモデルと同じように保存してください。 – Dunhamzzz

+0

後でちょっと試してみてください(今私は自分の仕事を変えました)。しかし、新しい値を更新または削除/挿入しますか?私の結合テーブルではidはprimary_keyです - 影響はありませんか?ありがとう – Orbitum

関連する問題