Доктрина 2 получает коллекцию из 2 отношений? - PullRequest
1 голос
/ 10 августа 2011

У меня есть 2 члена таблицы и комментарии .. Я успешно присоединяюсь к ним.так что теперь я могу получить коллекцию всех записей для любого пользователя.но мне нужно создать еще одну таблицу под названием «последователи», где каждый пользователь может следить за каждым.поэтому теперь я хочу получить возможность получать все комментарии от 1 пользователя, а также комментарии для пользователей, за которыми он также следит.но не знаю, какой способ подойти к завершению этих отношений с этой новой таблицей.

сущность пользователя:

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)

, однако, как я могу добавить «следующую» таблицу (как в твиттере).где один может следовать за другим, и поэтому я мог бы не только видеть комментарии пользователя 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 $???;

}

1 Ответ

0 голосов
/ 10 августа 2011

Вероятно, лучший способ сделать это - создать отношения между Подписчиками и Участниками.

Затем создайте EntityRepository для сущности Comments, в которой вы создадите функцию, такую ​​как: getCommentsByUserIdInclusiveFollowers ($ userId), в которой вы создадите запрос DQL, который возвращает нужную информацию / комментарии, которые вам нужны.1004 * Так бы я и предложил.

...