我曾尝试构建好友系统,但偶然发现了我的两个副作用:状态为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中搜索了很多答案,但没有找到。