2011-08-10 11 views
1

私は2つのテーブルのメンバーとコメントを持っています。私は正常に彼らにjoing。だから、私はすべてのユーザーのためのすべてのエントリのコレクションを取得することができます。私はそれぞれのユーザーがそれぞれ従うことができる 'フォロワー'というanothewrテーブルを作成する必要があります。したがって、今、私は1人のユーザーからすべてのコメントを得ることができるようにしたいと思います。この新しいテーブルとこの関係を完成させるためにどのようにアプローチするべきかは知らない。doctrine 2 2つの関係からコレクションを取得していますか?

ユーザエンティティ:

namespace Entities\Members; 

/** 
* @Entity(repositoryClass="\Entities\Member\MembersRepository") 
* @Table(name="Members") 
* @HasLifecycleCallbacks 
*/ 
class Members extends \Entities\AbstractEntity 
{ 
    /** 
    * @Id @Column(name="id", type="bigint",length=15) 
    * @GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 
    /** @Column(name="userid", type="bigint", length=26, nullable=true) */ 
    protected $userid; 
    /** @Column(name="fname", type="string", length=255,nullable=true) */ 
    protected $fname; 
    /** @OneToMany(targetEntity="\Entities\Users\Wall", mappedBy="entry", cascade={"persist"}) */ 
    protected $commententries; 

    public function __construct() 
    { 
     $this->commententries = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 
} 

コメントエンティティ:

namespace Entities\Members; 

/** 
* @Entity(repositoryClass="\Entities\Member\CommentsRepository") 
* @Table(name="comments") 
* @HasLifecycleCallbacks 
*/ 
class Comments extends \Entities\AbstractEntity 
{ 
    /** 
    * @Id @Column(name="id", type="bigint",length=15) 
    * @GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 
    /** @Column(name="userid", type="bigint", length=26, nullable=true) */ 

    /** 
    * @ManyToOne(targetEntity="\Entities\Member\Member", cascade={"persist"}) 
    * @JoinColumn(name="userid", referencedColumnName="id") 
    */ 
    protected $entry; 

} 

この作品、私は経由でユーザーからのコメントをすべて取得することができます:私は追加することができますどのように、しかし

$this->repo->findByUserid(3); (userid = 3) 

'follow'テーブル(ちょうどtwitterのような)。誰かが他に従うことができるので、私はユーザーID-3のコメントだけでなく、彼が従っている他のユーザーからの他のコメントも見ることができるでしょうか?

テーブルと呼ばれる:フォロワー:おそらく

namespace Entities\Members; 

/** 
* @Entity(repositoryClass="\Entities\Member\FollowersRepository") 
* @Table(name="followers") 
* @HasLifecycleCallbacks 
*/ 
class Followers extends \Entities\AbstractEntity 
{ 
    /** 
    * @Id @Column(name="id", type="bigint",length=15) 
    * @GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 
    /** @Column(name="userid", type="bigint", length=26, nullable=true) */ 

    protected ???; 

    /** 
    * @Many ??? 
    * @JoinColumn( ??? 
    */ 
    protected $???; 

} 

答えて

0

これを行うための最善の方法は、メンバーへのフォロワーから関係を作成することです。

次に、必要な正しい情報/コメントを返すDQLクエリを作成するgetCommentsByUserIdIncludingFollowers($ userId)のような関数を作成するコメントエンティティ用のEntityRepositoryを作成します。

これは私が提案する方法でしょう。

+0

フォロワーからメンバーまでのどのような関係ですか? –

+0

Followersエンティティでは、Membersに対してManyToMany関係を作成します。 1人のフォロワーに複数のメンバーをフォローさせ、1人のメンバーに複数のフォロワーを持たせることが必要なのかもしれません。 参照:私はそれを行う場合http://www.doctrine-project.org/docs/orm/2.0/en/reference/association-mapping.html#many-to-many-unidirectional – AquaRobin

+0

しかし、それが作成されますmanay-manyテーブル。メンバーとフォロワーの間のリンクを示しています。だから、どうすればうまくいくのですか?このリンクされたテーブルにコメントを追加するにはどうしたらいいですか? –

関連する問題