19

FOSUserBundleを使用しています。

Model/User.php そして、との違いを理解したかったのEntity/User.phpです。

モデルとエンティティを同じにすることはできませんか?

4

1 に答える 1

35

Doctrine2の役割と用語に関する最良の要約は次のとおりです。

エンティティは、Doctrine 2.0 ORM(およびJavaの世界ではHibernate)のUnitOfWorkパターンで使用され、実世界のモノのオブジェクト表現でもあります。レコードと同じ属性とメソッドがありますが、その永続性についてはわかりません。これは基本的にPOPO(単純な古いPHPオブジェクト)です。これにより、これらのクラスとオブジェクトを非常に軽量にすることができます。

モデルは、モノの概念的なオブジェクト表現です。この用語は、上記のすべてに使用できます。レコードは、エンティティまたはドキュメントと同じようにモデルです。この用語は、モノのオブジェクト表現を表します。

したがって、いくつかのモデルを含むバンドルを作成し、バンドルを永続層から独立させたい場合は、モノを定義するモデルクラスとインターフェイスを作成します。

永続性の実装に固有ではないすべてを定義および/または実装し、委任を介して関連するエンティティまたはドキュメントクラスを使用して、特定のものを処理します。

これは、たとえば、ユーザーモデルを定義するFOSUserBundleで行われます。このユーザーモデルはバンドル全体で使用されますが、独自のデータにアクセスするための完全な実装はありません(私は見ていませんが、インターフェイスのみである可能性があると思います)。最終的な実装はエンティティクラスで行われ、別の実装はドキュメントクラスで行われるため、MySQLとMongoDBのどちらを使用していても、同じユーザーモデルで作業できますエンティティまたはドキュメントから独立したモデルを常に使用するため、コードを変更せずに一方から他方に切り替えることもできます。

于 2012-07-12T01:52:33.750 に答える