私は、組織とその役員のセットを持っています。 すべての組織には取締役がおり、多くの取締役は複数の組織の取締役を務めています。関連するエンティティを介して適切に再帰する
私はJIT Hypertreeを使用してその関係を説明しています。 JIT Hypertreeスキーマでは、1つのアイテムがすべての親であり、単一のJSON配列に基づいて描画されている必要があります。
私は再センタリングイベントのクエリを持って、変更に基づいてグラフを再配置したいと思っています。それから、2つのレベルはうまくいくでしょうが、私はそれをどうやって行うかを考え出すことができませんでした。
私が現在持っているコードは、開始組織から3段階で手動で再帰しますが、必要なのは関連するすべてのレコードを再呪うことです。
だから、Orgから始まり、Orgの子ども(役員)の配列を追加します。次に、各ボードメンバーのすべてのボード(現在のOrg以外)を取り出し、それらをボードメンバーの子として追加します。
これは、各トレイルの死亡が終わるまで続きます。おそらく、1つのボードにのみ所属するボードメンバーになります。
この配列の作成方法と重複を避ける方法についてアドバイスをいただけますか?
$board = $center->board();
$top['id'] = $center->ID;
$top['name'] = $center->Org;
$top['children'] = array();
if ($board) {
foreach ($board as $b) {
$child['id'] = $b->ID;
$child['name'] = (strlen(trim($b->Last)) > 0) ? $b->First . ' ' . $b->Last : 'Unknown';
$child['data']['orgname'] = $center->Org;
$child['data']['relation'] = $b->Role;
$child['data']['occupation'] = $b->Occupation;
$child['children'] = array();
$childboards = $b->boards();
if ($childboards) { foreach ($childboards as $cb) {
$gchild['id'] = $cb->ID;
$gchild['name'] = $cb->Org;
$gchild['data']['orgname'] = (strlen(trim($b->Last)) > 0) ? $b->First . ' ' . $b->Last : 'Unknown';
$gchild['children'] = array();
$childboardmembers = $cb->board();
if ($childboardmembers) { foreach ($childboardmembers as $cbm) {
$ggchild['id'] = $cbm->ID;
$ggchild['name'] = (strlen(trim($cbm->Last)) > 0) ? $cbm->First . ' ' . $cbm->Last : 'Unknown';
$ggchild['data']['orgname'] = $cb->Org;
$ggchild['data']['relation'] = $cbm->Role;
$ggchild['data']['occupation'] = $cbm->Occupation;
$ggchild['children'] = array();
$gchild['children'][]= $ggchild;
}}
$child['children'][]= $gchild;
}}
$top['children'][] = $child;
}
}
$top['data'] = array();
$top['data']['description'] = $center->Desc;
echo json_encode($top);
//編集2011年10月24日のRe hakre応答 で私のデータ構造は、二つの指定機関のための固有のID、ユニークなIDを持つ人々のテーブル、そしてブリッジングテーブルを持つ組織の表である(エンティティ)と人物とその人物がエンティティで果たしている役割。典型的な多対多。サブボードは全くありません。私はそれをイメージしましたが、今は無意味ですが、私はそれを底に付け加えます。それは彼らのバンドの例ではこのように書き、その中で
JITライブラリデータ構造は、(私には)少しナッツです:
Top: Nine Inch Nails
Child: Jerome Dillon
Child: Howlin Maggie (another band)
{all the bands' members and then all of their bands...}
それも人であるかのように、組織(バンド)が扱われますそれは多くの人で構成されています。上記のコードを使用して再帰的に使用すると、ひどい肥大化が起こりますが、JSONは膨らみにもかかわらず正しく動作します。
例JSONとExample Visualization //エンド編集
hakreこんにちは、応答をありがとう!私はスキーマを明確にし、JITライブラリJSONのスキーマについてコメントしました。あなたの答えに何か影響があるかどうか見てみてください。ありがとう! – jerrygarciuh