2011-10-12 3 views
6

現在、symfony2フレームワークの使用方法を学習しています。symfony2でのデータベースアクセスのないモデル

cook bookを見ると、すべてがどのように適合しているかを基本的に理解し始めています。ドキュメントで

  • は、ORMとして教義を使用して、エンティティについての話の多くがあるように思われる:

    しかし、私はMVCパターンのモデルであると考えている事業体、に関する2つの質問を持っています。 ORMを必要としないエンティティ/モデルがある場合、これはまだ「エンティティ」と見なされますか?

  • ほとんどのチュートリアルでは、エンティティはアプリケーションバンドルの下にある「エンティティ」というフォルダに投げられることがよくあります。アプリケーションに多くのエンティティがあると、これはかなり乱雑になり、組織化されていないと感じています。エンティティをグループ化して整理するにはどうすればよいですか?

乾杯:)

答えて

3

あなたはその後、ちょうどのようなあなたの名前空間の定義でそのscructureに従って、「エンティティ」フォルダにサブフォルダを追加する可能性があります。

<?php 

namespace Acme\SampleBundle\Entity\Subfolder\EntityClass 

にあなたの質問についてormなしで仕事:それは単純です、ただそれを使用しないでください。 あなたのクラスは "普通の"クラスのように動作します..

しかしDoctrine2のEntityManagerのように、何らかのインターフェースが必要です。

私はいつもORM/ODMの使用を好むでしょう。

その場合、私はちょうどあなたのエンティティクラスに簡単な方法を追加します。

<?php 

public function sendByEmail() { 

// Do stuff 
} 

あなたは全くのものを永続化する必要があり(DBに保存)いけません。 symfony1.4では、エンティティに対してsave()メソッドがあることに注意してください。 symfony2のものは、$entityManager->persist($entity);

+1

私がORMを使用しないことによって意味したことは、一部のエンティティがデータベースに全く触れないということです。代わりに、ファイルやその他のストレージに読み書きする可能性があります。 – F21

+0

AFAIK Doctrine ODMはxmlファイルに非常によくマッピングできます。おそらくそれはあなたのユースケースです... – mblaettermann

+0

ありがとう、教義がそれを行うことができますか分からなかった。私のエンティティにデータを処理して検証させたい場合はどうでしょうか?保存する代わりに、電子メールでデータを送信する必要があります。この場合、私はまだEntityManagerを使用する必要がありますか? – F21

0

あなたが任意のORMを必要としないエンティティ/モデルを持っていることを伝えるとき、あなたは意味ですか:

  • あなたが構築することができますので、モデルは非常に簡単です独自のデータベースクエリ、OR:
  • データは、通常のファイル

に保存することができますか?

これが最初のケースであれば、それを必要に応じて管理できますが、ORMを使用することをお勧めします。

これが第2のケース(私が前提とする)であれば、依然としてエンティティクラスをよりよく作成する必要があります。クラス内で異なるデータにリンクするだけです。データベースを照会する代わりに、ファイルを検索します。

ベストプラクティスを保存することで、ある日DBモデルに切り替える場合は、これらのクラスを変更するだけで済みます。

あなたの2番目の質問に答えるために、私は50以上のエンティティモデルを持っていますが、これは混乱を招くものではありません。 Entitiesクラスの中で、エンティティ・リレーションシップ・モデルを見つける場所をユーザーに教えるので、これは明らかです。

これは役に立ちますか?どのようにあなたのモデルクラスを整理するためにあなたの質問について

4

によって節約されます。エンティティは、リレーショナルデータベースに格納されたモデルです。ドキュメントは、ドキュメントデータベース(MongoDBなど)に格納されたモデルです。

使用しているストレージの種類によっては、モデルを特定の名前空間に曲げたくない場合は、ここで提案します。モデルクラスの名前空間Modelを作成します。リレーショナルデータベースを使用する場合は、モデルクラスを拡張してEntity名前空間に配置し、マッピング情報を外部ファイルに提供します。後でドキュメントデータベースに移動する場合は、同じ操作を行いますが、Document名前空間を使用します。

このアイディアの良い例は、FOSUserBundleを参照してください。