報奨金:
良い解決策への+500repの報奨金。私は2週間、この壁に真剣に頭をぶつけて、助けの準備ができています。
テーブル/モデル(関連付けを表示するために簡略化)
- ノード
- id
- 名前
- node_type_id
- node_associations
- id
- node_id
- other_node_id
- node_types
- 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'
)
);
最初、私はそれを持っていると思いました-これは理にかなっています。しかし、それから私はデータを取得しようとし始め、過去2週間壁に頭をぶつけてきました。
問題の例:
次のノードがあるとしましょう。
- NBC
- ER
- ジョージ・クルーニー
- アンソニー・エドワーズ
- 今夜のショー:レノ
- ジェイ・レノ
- 狐
- ファミリーガイ
すべてのテレビ局をプルし、(例として)俳優を含むテレビ番組を含めることができるようにデータ構造を設定するにはどうすればよいですか?これは、通常のモデル設定では簡単です。
$this->TvStation->find('all', array(
'contain' => array(
'TvShow' => array(
'Actor'
)
)
));
そして、多分私はすべての男性俳優を検索し、テレビ局を含むテレビ番組を含めたいと思います。または、午後9時に開始し、俳優と放送局が含まれるテレビ番組...など。
しかし、HABTMまたはHasMany Through self(さらに重要なことに、未知のデータセット)では、モデルがどのフィールド(node_idまたはother_node_id)であるかわからず、全体として、どのように取得するかについて頭を悩ませることはできません。コンテンツ。