2011-12-09 15 views
3

対クエリに参加しました:Zend_Db_Tableが、私はベストプラクティスとデータベースのデータにアクセスしながら一貫性を達成するための最良の方法だろうかと思ったデータベースビュー

現在の構造が続く

Data Access --> Business Logic --> Controller --> View 

マイデータアクセスとなります層は、表ごとにZend_Db_Table,Zend_Db_TableRowsetおよびZend_Db_TableRowで構成されています。私は彼の名に基づいて特定のユーザーを取得したい

私のビジネスロジックは、問題のあるクエリのtable

例に基づいてという名前のモデルに格納されます。これを行うには、userテーブルとroleテーブル(role.idはユーザテーブルでrole_idと呼ばれます)があります。

返される各行に対して追加クエリを実行するfindDependentRowsetを使用する必要はありません。 (多くの行を返すことができるデータを表示するデータグリッドで問題になる)。

選択肢は私が持っている(のgetName()を単純化するために、この例で使用されているが、それは何も処理することができます):返されるuserテーブルのロールテーブルの上に参加

  • は、カスタムを作りますassociative arrayで構成されたindex arrayです。その場合、私のModel_DbTable_Userに定義されているgetName()関数を名前(ファーストネーム+ミドル+ラストネーム)を作成するために呼び出すことはできません。私の配列をZend_Db_Table_Rowset(または私のカスタムtable_rowset)に "キャスト"しても、汎用のZend_Db_Table_Rowオブジェクトを取得するので、カスタムクラスメソッドにアクセスできません。

  • 実行時にクエリにCONCAT()を使用してカスタム結合を行いますが、名前はビルドされているので、getName()メソッドは必要ありません。しかし、私が適用される特定のロジックを持っている場合、私は立ち往生しています。

  • は私のデータベースにuserrole表を結合するビューを作成し、Zend_DbTableZend_DbTableRowsetZend_DbTableRowの新しいセットを作成します。こうすることで、データベーススタックに特定のロジックを持たせることができます。

  • ORM(propelまたはdoctrine(1または2))は、これらの経験はありません。適切な選択を行うために、より多くの情報が必要な場合があります。

私の別の目的は、私は私のデータ構造の一貫性

すなわち得ることを確認することです: 配列のすべての方法:

$row = $rowset->current(); 
$row->field; 

答えて

1

array(
    array(row1), 
    array(row2) 
); 

オブジェクトのすべての方法

ビューの作成は、それが競合する以上のアイデアを補完するものであるにもかかわらず行わなければなりませんそれらと一緒に。ビューは次のようになります。

  • 抽象的なデータベースは、より簡単に作業できるものになります。
  • 解析が必要ないため、処理速度が向上します。
  • アプリケーションの外部からアクセスできます。

ビューを作成したら、問題を最もよく解決する方法を選択できます。単一のエンティティを表すフォームを作成する場合は、ORMが適している可能性があります。しかし、大きなデータのリストを表示したり、多くのエンティティを含むレポートを生成したりする場合は、SQLのような宣言言語を使用するほうが簡単で、パフォーマンスは向上します。

関連する問題