我会尽力解释我的问题。我有一个与另一个实体相关的消息,称为回复(一条消息可以有零或n个回复),我想考虑以下情况:
我的消息实体(我将放置OneToMany关系):
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* @ORM\Table(name="messages")
* @ORM\Entity
* @ORM\Entity(repositoryClass="AppBundle\Repository\MessageRepository")
*/
class Message {
/**
* @ORM\OneToMany(targetEntity="ReplyMessage", mappedBy="message")
*/
private $replies;
/**
* Add replies
*
* @param \AppBundle\Entity\ReplyMessage $replies
* @return Message
*/
public function addReply(\AppBundle\Entity\ReplyMessage $replies)
{
$this->replies[] = $replies;
return $this;
}
/**
* Remove replies
*
* @param \AppBundle\Entity\ReplyMessage $replies
*/
public function removeReply(\AppBundle\Entity\ReplyMessage $replies)
{
$this->replies->removeElement($replies);
}
/**
* Get replies
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getReplies()
{
return $this->replies;
}
我用来实现目标的代码如下:
$query = $this->createQueryBuilder('message')
->where('message.creator = :username or message.receiver = :username')
->leftJoin('message.replies', 'replies')
->andWhere('replies.user = :username')
->setParameter('username', $username)
->getQuery();
$sent = $query->getResult();
return $sent;
我不是使用Doctrine构建查询的专家,而且我不知道如何控制我的所有案例,如果有人可以帮助我会非常感激
答案 0 :(得分:3)
这就是QueryBuilders的美妙之处。您可以创建如下语句:
name amount [New COLUMN]
---------- ----------- --------------
aa 287.66 0000028766
bb 66 0000006600
cc 2475.1 0000247510
dd 214 0000021400
(4 row(s) affected)
答案 1 :(得分:0)
不要在->getResult();
存储库中使用AppBundle\Repository\MessageRepository
,因为有时您需要多次使用他,例如:BreadcrumbsBundle
需要查询(不是结果,这会受到性能的影响)