Я пытался создать систему друзей, но наткнулся на проблему, где у меня есть два побочных эффекта, когда userid (A) -friendid (B) со статусом = 1, но я должен проверить userid (B) -friendid (А) со статусом = 1 тоже.Я не могу этого добиться.
Я уже пытался проверить второе условие, сделав одно из цикла for для count () друзей, которые были найдены с помощью userid, но таким образом у меня будет слишком много запросов.Запросы будут расти с увеличением количества друзей пользователя, потому что мне придется проверять userId (B) -friendId (A), userId (C) -friendId (A) и т. Д.
Мой репозиторий при этоммомент:
public function personalFriends($userId){
$em = $this->getEntityManager();
$result = $em->createQuery('SELECT friends FROM AppBundle\Entity\Friends friends
INNER JOIN AppBundle\Entity\User myuser WHERE friends.friendsWithMe = :userId AND friends.status = 1');
$result->setParameter('userId', $userId);
return $result->getResult();
}
Объект моих друзей:
class Friends
{
/**
* @ORM\Id()
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\User", inversedBy="myfriends", fetch="EAGER")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false)
*/
private $friendsWithMe;
/**
* @ORM\Id()
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\User", inversedBy="friendof", fetch="EAGER")
* @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;
}
}
Объект моего пользователя:
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;
Мой ожидаемый результат (пример) - проверить, если user_id(12)-friend_id(45) status=1
, но также user_id(45)-friend_id(12) status=1
.Сейчас мои результаты только: user_id(12)-friend_id(45) status=1
.Прошу прощения, если вопрос повторяется, но я много раз искал ответ на этот вопрос в dql и не нашел его.