我正在使用Symfony 2.8和Doctrine 2.4构建一个交友系统。
我有一个MateRelationship实体:
class MateRelationship
{
/**
* @var integer
*
* @ORM\Column(type="integer", name="id")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Acme\UserBundle\Entity\User")
* @ORM\JoinColumn(name="sender", referencedColumnName="id", nullable=false)
*
*/
private $sender;
/**
* @ORM\ManyToOne(targetEntity="Acme\UserBundle\Entity\User")
* @ORM\JoinColumn(name="receiver", referencedColumnName="id", nullable=false)
*
*/
private $receiver;
/**
* @var \DateTime
*
* @ORM\Column(type="datetime", nullable=false)
*/
private $date;
/**
* @var boolean
*
* @ORM\Column(type="boolean", nullable=false)
*/
private $invitationAccepted;
我的目标是编写一个DQL查询来获取给定用户的所有被接受的好友关系(无论该用户是发送方还是接收方)。
我已经用两个查询并合并结果的方式实现了这一目标,但这种方法并不优化且难以实现$limit
限制。
public function getMates($user, $limit = 0){
$query1 = $this->_em->createQuery('SELECT m, u.nickname, u.username FROM AcmeUserBundle:MateRelationship m JOIN m.receiver u WHERE m.invitationAccepted = 1 AND m.sender = :user')
->setParameter('user', $user);
try{
$result1 = $query1->getResult();
}
catch(\Doctrine\ORM\NoResultException $e){
$result1 = [];
}
$query2 = $this->_em->createQuery('SELECT m, u.nickname, u.username FROM AcmeUserBundle:MateRelationship m JOIN m.sender u WHERE m.invitationAccepted = 1 AND m.receiver = :user')
->setParameter('user', $user);
try{
$result2 = $query2->getResult();
}
catch(\Doctrine\ORM\NoResultException $e){
$result2 = [];
}
return array_merge($result1, $result2);
}
我希望能使用一条查询语句,并且可以使用
->setMaxResults($limit)
,但我不知道如何将这两个查询合并成一个。
谢谢你的帮助 :)
CASE
语句的别名,提取数据会更容易一些。 - yceruto"Doctrine\ORM\Query\QueryException"
"[Syntax Error] line 0, col 32: Error: Unexpected 'NULL'"
。这可能与此问题有关吗? - Kaz