2011-07-13 44 views
1

我在HABTM連接表中更新(更好地更新而不是重新創建)額外字段有問題。我搜索谷歌和其他來源,但現在掙扎了4天。CakePHP更新HABTM連接表上的額外字段

我有型號:

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, 
); 
} 

連接表tutorial_categories_tutorial有ID,tutorial_id,tutorial_category_id,ORDER_BY領域。

我試圖更新像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值。我試過hasMany,但沒有運氣。

請幫忙和/或給予建議和解釋。

謝謝!

回答

3

由於您已將額外的數據(訂單字段)添加到HABTM連接模型,您實際上已經超出了與CakePHP的簡單HABTM關係的功能。你實際需要設置的是hasMany Through relationship

在你的情況下,你將基本上用教程ID,catergory id和儘可能多的數據創建一個「成員資格」模型,你想分配給它。然後,您將定義relatioships爲Membership隸屬於教程&類別。這本書可能比我剛纔解釋的更好的例子!

這樣做的主要原因是每個「會員」記錄都被視爲正常記錄,並且沒有附加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