我有两个MySQL表
1) post table:每个item都有一个唯一的id。
id | title | content | ...
1 | Hi | Oh~ | ...
2)标签表:每个项目的id不是唯一的。
id | description |
1 | Meow |
1 | Cat |
在我的模型中,我已经声明了Post hasMany Tag和Tag belongsTo 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控制器数据库中的一个帖子:
$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表中。
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)
如何将所有数据保存到标签和post表?我哪里做错了?谢谢!
正如@Pankaj在子表中所说,您需要有唯一的id(自动递增,主键)以及包含帖子和标签之间关系的字段,并且根据蛋糕的标准,它应该标记为post_id。然后toy应该删除foreach(){}块,或者至少在循环中删除提交
在你的PostsController中,尝试添加:
public $uses = array('Post', 'Tag');
这不是完整的答案,但如果不添加这一行,您将为此挣扎很长时间。您还需要发布您的视图,并展示如何使用表单帮助程序。