Nodes
メインモデルとしてCMS を構築しようとしています。各Node
belongsTo
a NodeType
、および everyNode
は、 any/every other に関連付けることができますNode
。
だから-これはHABTMが必要だと思った:
//Node model
public $hasAndBelongsToMany = array(
'AssociatedNode' => array(
'className' => 'Node',
'foreignKey' => 'node_id',
'associationForeignKey' => 'associated_node_id',
'joinTable' => 'node_associations'
)
);
問題は、それが機能する唯一の方法は、関連付けごとに2つの行がある場合です。
関連行が 1 つだけの例:
ノード
- 小胞体 (id=1)
- ジョージ・クルーニー (id=2)
これら 2 つのノード間の関係を説明する結合テーブル内の 1 つの行:
- 'node_id' = 1
- 'associated_node_id' = 2
今 - TV Shows と Contain をクエリすると、それは Actor ノードです:
$nodes = $this->Node->find('all', array(
'conditions' => array(
'Node.node_type_id' => '645' //tv shows
),
'contain' => array(
'AssociatedNode' => array(
'conditions' => array(
'AssociatedNode.node_type_id' => '239' //actors
),
)
)
));
これは機能し、私は ER を取得します -> ジョージ クルーニー。
しかし、ジョージ・クルーニーが出演しているすべてのショーをプルしたい場合はどうすればよいでしょうか?
$nodes = $this->Node->find('all', array(
'conditions' => array(
'Node.node_type_id' => '239' //actors
),
'contain' => array(
'AssociatedNode' => array(
'conditions' => array(
'AssociatedNode.node_type_id' => '645' //tv shows
),
)
)
));
これは、George Clooney の ID が「node_id」フィールドにあり、ER の ID が「associated_node_id」フィールドにあることを探しているため、機能しません。実際には逆になっています。
私が考えた唯一の解決策は、すべての関連付けに対して2行を保持することです。しかし、これはやり過ぎのようです。しかし、関連付けが保存または削除されるたびに、各複製を他の複製と確実に同期させる何らかのカスタムを考え出す必要があります...など-これはワームの大きな缶のようです。
足りないものはありますか?