CakePHP保存有很多关联数据

时间:2014-03-29 21:20:02

标签: php cakephp cakephp-model

我有两个MySQL表。

1)发布表:每个项目都有唯一的ID。

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

2)标签表:每个项目的ID都不是唯一的。

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

在我的模型中,我已声明Post有多个标记和标记属于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'
    )
);

现在我正在尝试将我对帖子所做的更改保存到帖子控制器中的数据库中:

            $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,但它没有向Tag表保存任何内容。它只将数据保存到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)

如何将所有数据保存到标签和帖子表?我哪里出错了?谢谢!

2 个答案:

答案 0 :(得分:1)

正如@Pankaj在子表中所说,你需要有唯一的id(自动增量,主键)以及包含帖子和标签之间关系的字段,并且按照蛋糕的标准,它应该标记为post_id。然后玩具应该删除foreach(){}块或至少在循环中删除空行,然后再提交

答案 1 :(得分:-1)

在PostsController中,尝试添加:

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

这不是完整的答案,但是你很难在很长一段时间内努力解决这个问题。您还需要发布您的观点,并展示您如何使用表单助手。