如何在cakePHP中定义两个外键
我有一张有几列的桌子。如何在cakePHP中定义两个外键,cakephp,Cakephp,我有一张有几列的桌子。 该表有一个主键(replyid)和两个外键(userid和postid) 以下是表格的结构: {replyid,content,userid,postid} 回复表有两个外键 我不确定这样设置外键是否正确: class Post extends AppModel{ var $name = 'Post'; var $useTable = 'post'; var $primaryKey = 'postid'; var $belongsTo
该表有一个主键(replyid)和两个外键(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'
)
);
}
?>
您能帮忙吗?不幸的是,CakePHP不支持复合键或部分主键。根据的建议,您可以使用直接查询调用,例如:
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)。(From)两个外键都可以,但是您应该在正确的模型中定义关系 在您的post模型中
var $hasMany = array(
'Reply' => array(
'className' => 'Reply',
'foreignKey' => 'postid',
//'foreignKey' => 'userid'
)
);
在您的用户模型中
var $hasMany = array(
'Reply' => array(
'className' => 'Reply',
//'foreignKey' => 'postid',
'foreignKey' => 'userid'
)
);
在数据库中构建表,并使用
cake bake
来构建模型-这样,您将看到cake如何以本机方式处理它。我建议您将db列命名为foreign\u id
。这将使生活变得更加轻松。正如斯沃恩克西所说,多个外键都很好,而且通常都是这样。我会坚持蛋糕惯例,把它们命名为post\u id、user\u id。