2014-03-29 32 views
0

我有兩個MySQL表。CakePHP保存有許多關聯的數據

1)發佈表:每個項目都有一個唯一的ID。

id | title | content | ... 
1 | Hi | Oh~  | ... 

2)標記表:每個項目的ID不是唯一的。

id | description | 
1 | Meow   | 
1 | Cat   | 

在我的模型已宣佈後的hasMany標籤和標籤屬於關聯帖子:

//in Post model 
var $hasMany = array(
    'Tag' => array(
     'className'  => 'Tag', 
     'foreignKey' => 'id', 
     'dependent'=> true 
    ) 

//in Tag model 
var $belongsTo = array(
    'Post' => array(
     'className' => 'Post', 
     'foreignKey' => 'id' 
    ) 
); 

現在我想保存到我的帖子控制器的數據庫中,我的崗位上做出了改變:

  $data = $this->request->data; 
      foreach($data['Tag'] as &$tagg){ 
        if($tagg["description"]!=""){ 
         $tagg['id'] = $data['Post']['id']; 
        } 
       } 
      if ($this->Post->saveAll($data,array('deep'=>TRUE))) { 
       var_dump($data); 
       $this->Session->setFlash(__('Saved.')); 
      } else { 
       $this->Session->setFlash(__('Not Saved.')); 
      } 

提交數據後,它閃過Saved但它沒有保存任何東西到標籤表。它只將數據保存到Post表中。

這裏的var_dump結果:

array (size=2) 
    'Post' => 
    array (size=4) 
     'id' => string '1' (length=1) 
     'title' => string 'aa' (length=2) 
     'content' => string 'hi' (length=2) 
     'url' => string 'abc' (length=3) 
    'Tag' => 
    array (size=6) 
     0 => 
     array (size=2) 
      'description' => string 'sadsad' (length=6) 
      'id' => string '1' (length=1) 
     1 => 
     array (size=1) 
      'description' => string '' (length=0) 
     2 => 
     array (size=1) 
      'description' => string '' (length=0) 
     3 => 
     array (size=1) 
      'description' => string '' (length=0) 
     4 => 
     array (size=1) 
      'description' => string '' (length=0) 
     5 => & 
     array (size=1) 
      'description' => string '' (length=0) 

我怎麼能保存所有數據到兩個標籤和後表?我哪裏出問題了?謝謝!

+0

您的窗體在視圖中是怎樣的?您是否正在嘗試使用信息保存新標籤? – skywalker

+1

「標籤」表不包含post_id字段,請添加並嘗試。因爲那是cakephp標準。 – Pank

回答

-1

在你的PostsController,試着加入:

public $uses = array('Post', 'Tag'); 

這不是完整的答案,但你會爲此努力奮鬥了很長一段時間沒有至少加入這一行。您還需要發佈視圖,並顯示您如何使用表單助手。

1

正如@Pankaj在子表中所說的,你需要有唯一的id(autoincrement,主鍵)以及一個包含帖子和標籤之間關係的字段以及蛋糕標準,它應該被標記爲post_id。然後玩具應該刪除foreach(){}塊或至少在循環中刪除提交之前的空行