我會盡我所能解釋我的問題。我與另一個實體的信息稱爲回覆(一個消息可以有零或正回覆),我要考慮到以下情況:QueryBuilder與一對多的關係和使用Doctrine的幾個條件
- 如果用戶A已經一個消息創建用戶B(用戶A是創造者) 但用戶B沒有回覆的消息,我不想得到消息
- 同上,但用戶B回覆了消息。我想和其回覆得到 消息,如果答覆存在
- 如果用戶B發送的消息給用戶A,我想與 其答覆如果得到的消息答覆存在
我的消息實體(我只是把一對多relantionship):
<?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;
}
而且碼T帽子我使用來實現我的目標是:
$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;
我不是教條的專家樓查詢,我不知道如何控制我的所有的情況下,現在,如果有人可以幫助我會非常感謝
不應該'getReplies()'已經有每個回覆,因爲它是一個關係?也許自我引用關係可以幫助你變得更加動態。在教條頁面中,他們使用'User'作爲例子。有時你想擁有「朋友」,這也只是「用戶」對象。所以你可以使用用戶對象作爲自我引用。回覆也是一個消息,所以我相信你也可以自我引用它,並且使用symfony的力量,你應該很容易獲得數據。 –