我有一张几列的桌子 该表有一个主键(replyid)和两个foreigne键(userid和postid)。
这是表格的结构: {replyid,content,userid,postid}
回复表有两个外键。
我不确定这样设置外键是否正确:
class Post extends AppModel{
var $name = 'Post';
var $useTable = 'post';
var $primaryKey = 'postid';
var $belongsTo = 'User';
var $hasMany = array(
'Reply' => array(
'className' => 'Reply',
'foreignKey' => 'postid',
'foreignKey' => 'userid'
)
);
}
?>
你可以帮忙吗?
答案 0 :(得分:1)
不幸的是,CakePHP不支持复合键或部分主键。根据{{3}}的建议,您可以使用直接查询调用,例如:
CREATE TABLE posts_tags (
id INT(10) NOT NULL AUTO_INCREMENT,
post_id INT(10) NOT NULL,
tag_id INT(10) NOT NULL,
PRIMARY KEY(id));
...或者,您可以创建代理键,也许是自动增量值。您可以使用char(36),而不是使用自动增量键作为主键。每当使用Model :: save方法保存新记录时,CakePHP将使用唯一的36个字符uuid(String :: uuid)。 (来自CakePHP manual)
答案 1 :(得分:1)
两个外键都可以,但你应该在正确的模型中定义关系。
在你的帖子模型中,
var $hasMany = array(
'Reply' => array(
'className' => 'Reply',
'foreignKey' => 'postid',
//'foreignKey' => 'userid'
)
);
在您的用户模型中
var $hasMany = array(
'Reply' => array(
'className' => 'Reply',
//'foreignKey' => 'postid',
'foreignKey' => 'userid'
)
);
答案 2 :(得分:1)
在数据库中构建表并使用cake bake
构建模型 - 这样您就可以看到Cake如何在本地处理它。我建议您将数据库列命名为foreign_id
。它会让生活变得更轻松。