2011-09-10 12 views
1

私は新しいWebアプリケーションを作成しており、設計計画に関する助けが必要です。Symfony2では、エンティティまたはカスタムリポジトリを使用する必要があります

私は「ストア」オブジェクトを持ち、それぞれにはいくつかの「メッセージ」オブジェクトがあります。この店のメッセージを示す店舗ページを表示したいのですが。 Doctrineを使用して、私はhttp://symfony.com/doc/current/book/doctrine.html

を使用してOneToManyをマッピングしました。ただし、メッセージを時系列の逆順に表示したいとします。それでも私は、その後

$store->getMessages(); 

は今、私は「検証」されたメッセージを表示したい呼び出して、「ストア」オブジェクトを呼び出しています

* @ORM\OrderBy({"whenCreated" = "DESC"}) 

:だから私は付け加えました。この時点で、私は@ORMを使ってこれを行う方法がわからないので、カスタムのリポジトリ層が必要だと思っていました。

私の質問は二つです:

  1. まず、私は、このエンティティ@ORMフレームワークを使用して行うことができますか?
  2. また、が正しいですこのデータベースクエリをラップする方法はありますか?

私は最終的にはSQL SELECT * FROM message WHERE verified=1 AND store_id=? ORDER BY myTime DESCを望んでいますが、これを「Symfony2」にする方法はありますか?

答えて

2

あなたの質問のパート1について...技術的に私はあなたがこれを行うことができると思いますが、あなたは効率的なやり方、あるいは良いことに反対しない方法でそれを行うことはできないと思います(エンティティマネージャをあなたのエンティティに注入する)。

あなたの質問は一見したところで、$store->getMessages()と考えているので、興味深いものです。しかし、あなたのカスタム条件のために、あなたはメッセージ用のカスタムリポジトリクラスを使う方が良いと思います。その後、

$messageRepo->getForStoreOrderedBy($storeId, $orderBy)

$messageRepo->getForStoreWhereVerified($storeId)のようなメソッドを持っているかもしれません。

$store->getMessagesWhereVerified()のような方法でStoreエンティティからこれを行うことができますが、これらのカスタムメソッドがますます必要な場合は、ストアエンティティを汚染すると思います。私はそれらをMessageリポジトリに保存することで、あなたの心配をより洗練された方法で分けていると思います。また、Messageレポジトリでは、でクエリを保存することはできません。では、メッセージテーブルにクエリしてWHERE句にstore_idを使用するだけで済みますので、ストアオブジェクトを最初に取得する必要はありません。

これが役に立ちます。

関連する問題