如何在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。