gpt4 book ai didi

CakePHP:双向自引用 hasMany 关联

转载 作者:行者123 更新时间:2023-12-03 17:56:33 25 4
gpt4 key购买 nike

我试图通过 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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com