2012-04-27 19 views
4

の同等の私は2つのテーブルがあります。Doctrine2サブクエリsymfony1怠惰なクエリゲッター

comment - id, application_id, comment, user_id, created_at, deleted_at 

comment_likes - comment_id, user_id 

私は標準DQLを使用してアプリケーションのコメントを取得することができますがSELECT u FROM Comment WHERE :application = application

コメントを通じてlopping、Iログインしたユーザーが既にコメントを好きであるかどうかを確認したいsymfony1で

、私は現時点では、単純な怠惰なクエリ$comment->hasUserLiked()

を使用しているだろう、Symfony2の中で、私はすべてのユーザーのクエリを実行する必要があるアプリケーションのコメントと、すべてのアプリケーションのコメントのクエリのために好き。

アプリケーションのコメントをループするときに、ユーザーがコメントコレクションを好きなレコードが好きであるかどうかを確認するために、各コメントでサブループを実行します。これはきれいではありません。

希望はこれが理にかなっています。

良い方法がありますか?

EDIT:サブコントローラを使用して、ユーザーがコメントを好きかどうかを表示することができますが、これはhtmlの2行分だけ上に表示されます。しかし、現在の実装よりもクリーンです。

答えて

2

。このようにして、Commentエンティティは、所有しているすべてのものについて知っているでしょう。次に、$comment->hasBeenLikedBy($user)のようなメソッドを実装することができます。このメソッドは、すべての好きなものをループし、渡されたユーザーによって実行されたものがあるかどうかを確認します。

Commentエンティティ:

<?php 
namespace Model; 

class Comment 
{ 
    /** 
    * @OneToMany(targetEntity="Model\Comment\Like", mappedBy="comment") 
    */ 
    private $likes; 

    public function hasBeenLikedBy(User $user) 
    { 
     foreach ($this->likes as $like) { 
      if ($like->getUser() == $user) { 
       return true; 
      } 

      return false; 
     } 
    } 
} 

Comment\Likeエンティティ:

<?php 
namespace Model\Comment; 

class Like 
{ 
    /** 
    * @ManyToOne(targetEntity="Model\Comment") 
    */ 
    private $comment; 

    /** 
    * @ManyToOne(targetEntity="Model\User") 
    */ 
    private $user 

    public function getUser() 
    { 
     return $this->user; 
    } 
} 

このコードは完全ではないとミスを含んでいてもよいが、私はそれはあなたの全体的なアプローチを表示するには十分です願っています。

+0

ありがとうございます。私はこれがこれを行う最もクリーンな方法だと信じています。バウンティは報われました:) – Flukey

0
  1. あなたは

  2. と呼ばれるときは、コメントに参加して、テーブルが好きで、同じコールに同類を得ることができるデータベースを照会するために、独自のhasUserLiked()関数を記述することができます。 あなたの教義のスキーマが正しく設定されている場合は、次のクエリを使用することができます:あなたはCommentComment\Likeエンティティ間の双方向の1対多の関係を設定する必要があり

    SELECT c FROM Comment c LEFT JOIN c.CommentLikes cl WHERE c.application = :application

+0

お返事ありがとうございます。 1.データベース呼び出しをエンティティに直接入れることはできません。ああ。 2.ログインしたユーザーがコメントを気に入っているかどうかを知りたければ、それは役に立たない。 – Flukey

関連する問題