如何通过检查ID来检查友谊的两面

时间:2019-01-21 14:10:40

标签: symfony doctrine-orm doctrine dql

我曾尝试构建好友系统,但偶然发现了我的两个副作用:状态为userid(A)-friendid(B)且状态为= 1,但是我必须检查userid(B)-friendid( A)的状态也为1。我无法做到这一点。

我已经尝试通过对userid找到的朋友的count()进行for循环来检查第二个条件,但是那样我将有太多查询。查询将随着用户的好友数而增长,因为我将不得不检查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中搜索了很多答案,但没有找到。

0 个答案:

没有答案