CakePHP:双向自引用 hasMany 关联

标签 cakephp associations has-many-through

我试图通过 CakePHP 中的关系来了解双向自引用 hasMany(真是满口!)。

我正在做一个图片匹配网站。

  • 图片通过“匹配”(连接模型)与其他图片相关联。
  • 每场比赛有两张图片并存储当前评分和总票数。
  • 查看图片时,其所有来自任一方向的相关图像都应该可用(通过其匹配项)。

  • 我首先通过与连接模型的关系定义了一个 hasMany。

    图片匹配连接表具有以下结构:
    id | picture_id | partner_id | rating | total_votes
    

    我的匹配加入模型关联如下所示:
    class PictureMatch extends AppModel {
    
    ...
    
        public $belongsTo = array(
            'Picture' => array(
                'className' => 'Picture',
                'foreignKey' => 'picture_id',
                'conditions' => '',
                'fields' => '',
                'order' => ''
            ),
            'Partner' => array(
                'className' => 'Picture',
                'foreignKey' => 'partner_id',
                'conditions' => '',
                'fields' => '',
                'order' => ''
            )
        );
    }
    

    每张图片都需要能够从任一方向访问其相关图片,但这是我无法掌握的地方。
    看起来我需要保存关系的双方,但这会破坏存储在连接模型中的额外数据 - 有两个数据库条目,投票可能会因方向而异。

    任何人都可以阐明在 CakePHP 中执行此操作的最佳方法吗?我比较困惑。
    是否可以即时创建反向关系?

    最佳答案

    您可以通过 Model::bindModel() 动态创建 realtions,这是非常有用的东西,它可以让您绑定(bind)反向关系,或者更确切地说,动态绑定(bind)您想要的任何方向。

    http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html

    此外,使用 Containable 行为,您可以创建无限链来检索您的关联日期前。

    包含('Picture.PictureMatch.Partner.PictureMatch.Picture.....')

    基本上你可以遍历你的所有模型,只要每个链与下一个链有某种关联,以便更好地解释它简单的例子(请忽略其中的逻辑)

    圆形属于方形
    正方形属于三角形

    所以 Triangle 与 Circle (直接)无关,但 Square 介于两者之间

    Circle->find('all', array('...', contain => array('Square.Triangle')); 
    

    或者为了获得更多乐趣,让我们一圈一圈地循环
    Circle->find('all', array('...', contain => array('Square.Trinagle.Square.Circle'));
    

    等等,当然这些例子是无用的,也没有任何编程逻辑,但我希望你明白你可以在无限数量的关系中来回循环。

    关于CakePHP:双向自引用 hasMany 关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10591630/

    相关文章:

    ruby-on-rails - 测试失败 : association id should be mandatory

    ruby-on-rails-3 - 事件管理员 has_many 通过删除关联

    ruby-on-rails-4 - ActiveAdmin has_many 通过关系不更新参数 Rails

    cakephp - 如何在 cakephp 中设置默认时区?

    javascript - Window.open 在 Cakephp 中调用 Action

    javascript - 每当我单击cakephp时如何使用ajax更改状态

    ruby-on-rails - 仅加载关联对象的一部分

    ruby-on-rails - update_attributes和直接设置为nil的区别

    mysql - rails : Issue with recieving nested forms with has many through join

    php - Cakephp 隐藏输入字段