如何在cakePHP中定义两个外键

时间:2010-07-02 20:39:49

标签: cakephp

我有一张几列的桌子 该表有一个主键(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'     
                        )
                        );  

                            }

?>
你可以帮忙吗?

3 个答案:

答案 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。它会让生活变得更轻松。