構造は可能な限りリレーショナルに近いものです。 この形式のデータストレージは、開発者の間で人気を得ており、拒否することはありません。
データは、識別子によってメイン要素へのアクセスを容易にする必要があります。 隣接する要素との関係は、メイン要素へのポインタとしてのセカンダリキーの使用に基づいています。 クイックアクセスがプラスになります。
データリストの再利用。 データスライスが受信されると、機会、主キーによる、または1つ以上の属性の値との一致による要素へのアクセス、および選択からのリストの作成が行われます。
追加のボーナスは、「オンザフライ」を使用することです。これにより、複数のレベルでオブジェクトにアクセスできます。
可能な接続のいずれか(1対多、多対1、多対多)を介した移行に対する明確なサポート。 データ構造をさらに変更して、関係のロジックを迅速に変更する機能。
何度も試行錯誤を重ねた結果、私は自分にぴったりのフォームを見つけました。 条件付きで、「基本フォーム」と呼びましょう。 視覚的には、メインフォームのデータはキーの配列で表され、その値はテーブルの自動インクリメントフィールドになり、値は選択されたテーブルのレコードフィールドのリストになります。 データベースから同様の構造を選択するには、rebuild(rebuild)rb()と呼ばれる条件付きの関数を使用します。
pre(rb( "マーク"));
Array( [1] => Array([id] => 1, [name] => ) [2] => Array([id] => 2, [name] => ) [4] => Array([id] => 4, [name] => ) )
一意の自動インクリメントフィールドにより、データレコードの名前の競合が保証されます。 これらは動的フィルタの形成にさらに役立つため、将来の使用も正当化されます。
リンクされたモデルテーブルは次のようになります。
pre(rb( "models"));
Array( [1] => Array([id] => 1, [marks_id] => 1, [name] => Volvo S60, [price] => 1644000) [2] => Array([id] => 2, [marks_id] => 1, [name] => Volvo V40, [price] => 1309000) [3] => Array([id] => 3, [marks_id] => 2, [name] => CLS Shooting Brake, [price] => 3520000) )
このような構成を使用するというさらなるアイデアは、選択するフィールドと選択の値の一貫した指示に帰着します。 フィールドはテキストフィールドと見なされ、配列キーまたは数値は選択の値と見なされます。 同時に、必要なすべての値の選択は、コードをコントローラーに転送せずに実行することも、テンプレートで直接実行することもできます。
少なくとも1つのブランドがあるモデルのリストと、これらのブランドのリストを表示します。
<? foreach(rb("marks", "id", "id", rb("models", "marks_id")) as $marks): ?> <h1><?=$marks['name']?></h1> <? foreach(rb("models", "marks_id", "id", $marks['id']) as $models): ?> <div><?=$models['name']?></div> <? endforeach; ?> <? endforeach; ?>
このアプローチにより、実質的に依存関係のない単純な線形ロジックを実装でき、迅速に変更できます。 再アセンブリ関数のパラメーター内のキーのセットは、機能とその変更の認識の容易さです。
この場合、すべてのボルボモデルは次のように選択されます。ブランド識別子はGETページリクエストから取得されます。
<? pre(rb( "models"、 "marks_id"、 "id"、$ _GET ['marks_id']))?>
Array ( [1] => Array([id] => 1, [marks_id] => 1, [name] => Volvo S60, [price] => 1644000) [2] => Array([id] => 2, [marks_id] => 1, [name] => Volvo V40, [price] => 1309000) )
同様に、他のフィールドで選択できます。 IDによるモデルの選択は次のとおりです。
<? pre(rb( "models"、 "id"、$ _GET ['id']))?> where $ _GET ['id'] = 2;
Array ( [2] => Array([id] => 2, [marks_id] => 1, [name] => Volvo V40, [price] => 1309000) )
ブランドごとに分けて選択してください:
<? pre(rb( "models"、 "marks_id"))?>
Array ( [1] => Array([id] => 2, [marks_id] => 1, [name] => Volvo V40, [price] => 1309000) [2] => Array([id] => 3, [marks_id] => 2, [name] => CLS Shooting Brake, [price] => 3520000) )
同様に、モデルからマシンのメーカーへのアピールがあります。
<? if($models = rb("models", "id", $_GET['id'])): ?> <? pre(rb("marks", "id", $models['marks_id'])); ?> <? else: pre(" "); endif; ?>
Array( [1] => Array([id] => 1, [name] => ) )
いくつかの欠点はありますが、このアプローチでは、標準の最初のフォームを使用してデータ要求を90%クローズできます。
このアプローチが誰かが生活を楽にするのに役立ち、データがより明確になることを願っています。 これにより、パラメーターなしで取得するフォームと同じようなフォームを常に取得できるようになります。 アプリケーションロジックが大幅に予測可能になります。
さて、実際にこの関数の実装 。