簡體   English   中英

CakePHP保存hasMany相關數據

[英]CakePHP saving hasMany associated data

我有兩個MySQL表。

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

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

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

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

在我的模型中,我聲明Post hasMany Tag和Tag屬於Post:

//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'
    )
);

現在,我嘗試將對帖子所做的更改保存到Posts Controller中的數據庫中:

            $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)

如何將所有數據保存到標簽表和發布表中? 而且我哪里出錯了? 謝謝!

就像@Pankaj在子表中所說的那樣,您需要具有唯一的ID(自動遞增,主鍵),以及一個包含帖子和標簽之間關系的字段,按照蛋糕的標准,應將其標記為post_id。 然后,玩具應該刪除foreach(){}塊,或者至少在循環中刪除空行,然后再提交

在您的PostsController中,嘗試添加:

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

這不是完整的答案,但是您將為此苦苦掙扎很長時間,而不必至少添加此行。 您還需要發布視圖並顯示如何使用表單幫助器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM