Вземане на приятели от базата ми връща приятелят и всички други записи на потребители
Искам да взема приятелите на даден потребител и за целта съм си написал метод в репото на ентитито Friends. Но кодато извикам метода ми връща масив с 0 елемент приятелят и всички останали потребители макар да не съм ги искал. Ако махна myuser от селекта ми се задейства lazy loading-а и не ми изкарва данните за приятеля ми освен неговото id. Това ми е репото:
public function personalFriends($userId){ $em = $this->getEntityManager(); $result = $em->createQuery('SELECT friends, myuser FROM AppBundle\Entity\Friends friends JOIN AppBundle\Entity\User myuser WHERE friends.friendsWithMe = :userId AND friends.status = 1'); $result->setParameter('userId', $userId); return $result->getResult(); }
Това ми е Friends ентитито:
class Friends { /** * @ORM\Id() * @ORM\ManyToOne(targetEntity="AppBundle\Entity\User", inversedBy="myfriends") * @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false) */ private $friendsWithMe; /** * @ORM\Id() * @ORM\ManyToOne(targetEntity="AppBundle\Entity\User", inversedBy="friendof") * @ORM\JoinColumn(name="friend_id", referencedColumnName="id", nullable=false) */ private $afriendof; /** * @var integer * * @ORM\Column(name="status", type="smallint") */ private $status; /** * @return User */ public function getFriendsWithMe() { return $this->friendsWithMe; } /** * @param mixed $friendsWithMe */ public function setFriendsWithMe($friendsWithMe) { $this->friendsWithMe = $friendsWithMe; } /** * @return User */ public function getAfriendof() { return $this->afriendof; } /** * @param mixed $afriendof */ public function setAfriendof($afriendof) { $this->afriendof = $afriendof; } /** * @return integer */ public function getStatus() { return $this->status; } /** * @param integer $status */ public function setStatus($status) { $this->status = $status; } }
Част от User ентитито ми:
class User implements UserInterface {
public function __construct() { $this->userPosts = new ArrayCollection(); $this->myfriends = new ArrayCollection(); $this->friendof = new ArrayCollection(); } /** * @var * @ORM\OneToMany(targetEntity="AppBundle\Entity\Friends", mappedBy="afriendof") */ private $friendof; /** * @var * @ORM\OneToMany(targetEntity="AppBundle\Entity\Friends", mappedBy="friendsWithMe") */ private $myfriends;
Как иначе да си изменя метода в репото така че да ми излизат само приятелите на дадения потребител, като в DQL няма ON на JOIN-а ?
Примерни резултати:
https://pastebin.com/2M4SYTLb