2015-12-21 108 views
0

所以我下面的數據庫設置,我創建了一個窗體時創建一個標籤下拉列表的博客文章,但提交我想它填充連接表。如何使用Yii2填充連接表?

以下僅適用於手動設置標籤ID的情況。

if ($model->load(Yii::$app->request->post())) { 
     $model->save(false); 
     $tags->blog_id = $model->id; 
     //$tags->tag_id = 1; 
     $tags->save(false); 
     return $this->redirect(['view', 'id' => $model->id]); 
    } else { 
     return $this->render('create', [ 
      'model' => $model, 
      'tags' => $brands, 
     ]); 
    } 

表格字段設置

表/數據庫下面的結構:

博客 -id(PK) -title -content

Blog_category -id (PK) -blog_ ID(FK) -tag_id(FK)

標籤 -id -title

UPDATE:

不知道下面的不過是最好的方式,它的作品,歡迎任何改進。

 foreach ($_POST['Tags']['tag_id'] as $tag){ 
      $tags = new Tags(); 
      $tags->blog_id = $model->id; 
      $tags->tag_id = $tag; 
      $tags->save(); 
     } 

回答

2

您是否嘗試過在分配

if ($model->load(Yii::$app->request->post())) { 
    $modelTags = load(Yii::$app->request->post('tags'))); 
    $model->save(false); 
    $tags->blog_id = $model->id; 
    $tags->tag_id = $modelTags->tag_id; 
    $tags->save(false); 
    return $this->redirect(['view', 'id' => $model->id]); 
} else { 
    return $this->render('create', [ 
     'model' => $model, 
     'tags' => $brands, 
    ]); 
} 

使用標籤PS使用 - >保存(假)應限制在測試階段的驗證問題的情況下。如果你不刪除這個標誌,你可能是db中不一致的數據集。

+0

謝謝你的工作,但我不明白爲什麼它沒有分配沒有分配,因爲默認窗體使用單個模型不需要。似乎加載 –

+0

,加載所有模型(包含標籤)。我無法肯定,因爲我沒有看到所有的代碼..明確加載$標籤會更好。但默認的形式使用你發送的變量$ render包括實際上當提交兩個都張貼.. – scaisEdge

+0

我認爲它的工作,但它實際上並沒有記錄在數據庫是當我做它手動設置控制器內的值而不是後期價值。 –