私は数ヶ月間ZFを使用していましたが、私は本当に満足していますが、モデル関係をどのように扱うかについては完全にはわかりません。データベース。多くの人々がこの問題を抱えており、誰もそれに対して良い解決策を見つけることはできないようです。 (そして第三者のORMの使用を避ける)たとえば、私はユーザのリストを持ち、各ユーザはグループに属しています。ユーザー情報とグループ名を表示するユーザーのリストが必要です(テーブル:ユーザーとグループ、ユーザーにはテーブルグループの外部キーがあります)。 私は持っている: これらのテーブル、UserMapperとGroupMapperを扱う2つのマッパークラス。私は、各ユーザーのグループ情報を取得するために、Zend_Db_Table_Row_AbstractはfindParentRowを行うことができ、ユーザマッパーで取得Zend_Db_Table_AbstractZend Framework - ORMの関係と最適化
を拡張しますが、問題は、私は行ごとに余分なクエリを持っている 2モデル・クラスのユーザーとグループ 2データソースクラス、これは良いことではありません。私が参加すれば、私は1つしかできません。もちろん、その結果をオブジェクトにマップする必要があります。私の抽象的なMapperクラスでは、列のエイリアシングを使用して各親行の結合テーブルを熱心に読み込もうとしています(これはYiiと同様です..)。 //ユーザーモデルオブジェクト
$userMapper= new UserMapper();
$users= $userMapper->fetchAll(); //Array of user objects
echo $user->id;
echo $user->getGroup()->name // $user->getParentModel('group')->name // this info is already in the object so no extra query is required.
私はあなたが私の意見を得ていると思います...複数のクエリを避けることなくこれを行うには、おそらく私よりも学術的なネイティブソリューションがありますか? // Zend dbテーブルは、メタデータを取得するために追加のクエリを実行します。私の問題は親行の情報を得るためです... yii ....のようなものです。$ userModel-> with( 'group') - > fetchAll(); ありがとうございます。
私は同じ問題で苦労しています。私は、Zend_Db_TableがTableDataGateway(TDG)の実装であるということがコアの問題だと思います。これは、リンクされたテーブルを扱うのに十分な柔軟性を備えていますが、結合を使用するカスタムクエリがなければ、特定したように複数のクエリが終了します。正確には、TDGと私の現実のニーズとの間のこの不一致は、しばしば第三者のORMのDoctrineのようなものに向かって私を押しつけてしまいます。 –
まあまあ、Doctrineは私が普段使っているプロジェクトにとっては大きすぎます。だから私はいつでも可能な限りZendクラスに頼り、それを簡単に保つようにしています。 ZF2のZend_dbと関連するクラスの計画は何か分かりませんが、私はいくつかの改善ができることを願っています... ZF2はこの夏/秋にリリースされるはずです – FranStrentz
ZF2 'Zend \ Db \ Table' APIはおそらく機能的にはZF1 'Zend_Db_Table'と同じでしょう。結局のところ、どちらもTDGの実装です。悲しいことに、ZF2がこの基本的なTDG /マッパー/結合/ユースケースの緊張を解決すると期待するのはおそらく妥当ではありません。 –