CakePhp:一个模型的多个关系

Posted

技术标签:

【中文标题】CakePhp:一个模型的多个关系【英文标题】:CakePhp: Multiple Relationships with one Model 【发布时间】:2014-09-25 19:57:15 【问题描述】:

我对一个模型的两个关联有一些问题.. 一张小图让我的问题希望更清楚一点..

http://imgur.com/hxL06u2(抱歉我不能在这里发图片)

所以我有可以写/拥有文章的用户.. 一个用户可以写多篇文章,而一篇文章只能由一个用户拥有(有很多)..

现在用户可以喜欢其他用户的文章...这是一个拥有并属于许多关系..我的问题是,当我创建文章时 sql 转储:

Cannot add or update a child row: a foreign key constraint fails (`xxx`.`articles_users`,... 

所以 cake 使用了错误的关系(habtm 而不是 has many),因此使用了错误的表(article_users 而不是articles)

我可以用正确的表编写我自己的保存查询(我已经尝试过它及其工作)但我认为这不是最好的解决方案..

有人知道更好的方法吗?谢谢!

编辑:

文章模型

拥有者:

public $belongsTo = array(
        'User' => array(
            'className' => 'User',
            'foreignKey' => 'user_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        )
    );

喜欢:

   public $hasAndBelongsToMany = array('User' => array( 
            'className' => 'User',
            'joinTable' => 'articles_users',
            'foreignKey' => 'article_id',
            'associationForeignKey' => 'user_id',
            'unique' => 'keepExisting',
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'finderQuery' => '',
            'deleteQuery' => '',
            'insertQuery' => ''
        )
    );

用户模型

public $hasMany = array(
    'Article' => array(
        'className' => 'Article',
        'foreignKey' => 'user_id',
        'dependent' => false,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'exclusive' => '',
        'finderQuery' => '',
        'counterQuery' => ''
    )
);

    public $hasAndBelongsToMany = array(
    'Article' => array(
        'className' => 'Article',
        'joinTable' => 'articles_users',
        'foreignKey' => 'user_id',
        'associationForeignKey' => 'article_id',
        'unique' => 'keepExisting',
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'finderQuery' => '',
        'deleteQuery' => '',
        'insertQuery' => ''
    ));

【问题讨论】:

分享您的 User 和 Article 模型的相关模型代码($hasMany、$belongsTo、HABTM) 【参考方案1】:

在您的用户模型中,您的关系名称/别名是相同的:文章。让他们与众不同。 根据documentation:但是,每个模型的别名在整个应用程序中必须是唯一的。

【讨论】:

以上是关于CakePhp:一个模型的多个关系的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 2.4 中同一模型的多个编辑表单

CakePHP:将数据保存到 3 个不同的模型

未使用 CakePHP 保存关系 hasMany 关系

CakePHP - 在模型中查找没有 hasMany 关系的 hasMany 关联?

cakePHP 保存到多个模型

cakephp 一个表单,多个模型,不显示一个模型的验证消息