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