赏金:
+500 代表赏金到一个好的解决方案。我已经把头撞在墙上两周了,我已经准备好寻求帮助了。
表/模型(简化以显示关联)
- 节点
- ID
- 姓名
- node_type_id
- 节点关联
- ID
- node_id
- other_node_id
- 节点类型
- ID
- 姓名
大概的概念:
用户可以创建节点类型(例如“电视台”、“电视节目”和“演员”......任何东西)。如果我提前知道节点类型是什么以及每个节点之间的关联,我会为它们制作模型 - 但我希望这是非常开放的,以便用户可以创建他们想要的任何节点类型。然后,(特定节点类型的)每个节点可以与任何其他节点类型的任何其他节点相关。
描述和我尝试过的:
每个节点都应该能够与任何/每个其他节点相关。
我的假设是,要做到这一点,我必须有一个关联表 - 所以我制作了一个名为“node_associations”的关联表,其中包含node_id
和other_node_id
.
然后我建立了我的关联(通过我相信使用 hasMany):(以下是我对我的设置的最好回忆......它可能会稍微偏离)
//Node model
public $hasMany = array(
'Node' => array(
'className' => 'NodeAssociation',
'foreignKey' => 'node_id'
),
'OtherNode' => array(
'className' => 'NodeAssociation',
'foreignKey' => 'other_node_id'
)
);
//NodeAssociation model
public $belongsTo = array(
'Node' => array(
'className' => 'Node',
'foreignKey' => 'node_id'
),
'OtherNode' => array(
'className' => 'Node',
'foreignKey' => 'other_node_id'
)
);
起初,我以为我做到了——这是有道理的。但后来我开始尝试检索数据,并且在过去的两周里一直在用头撞墙。
示例问题:
可以说我有以下节点:
- 美国全国广播公司
- 急诊室
- 乔治·克鲁尼
- 安东尼·爱德华兹
- 今晚秀:雷诺
- 杰·雷诺
- 狐狸
- 居家男人
如何设置我的数据结构以能够提取所有电视台,并包含他们的电视节目,其中包含他们的演员(例如)?这将是简单的正常模型设置:
$this->TvStation->find('all', array(
'contain' => array(
'TvShow' => array(
'Actor'
)
)
));
然后,也许我想检索所有男演员并包含包含电视台的电视节目。或者晚上 9 点开始的电视节目,包含演员和电台……等等。
但是 - 使用 HABTM 或 HasMany Through self(更重要的是,未知数据集),我不知道模型是哪个字段(node_id 或 other_node_id),总体上我无法理解我会如何得到内容。