Как я могу проверить две стороны дружбы, проверив идентификаторы - PullRequest
0 голосов
/ 21 января 2019

Я пытался создать систему друзей, но наткнулся на проблему, где у меня есть два побочных эффекта, когда 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 и не нашел его.

...