【发布时间】:2015-06-09 00:52:54
【问题描述】:
我有这个表关系:
这是messages 和emails 的实体的样子(我刚刚添加了重要信息):
class Message
{
/**
* @var Brand
*
* @ORM\ManyToOne(targetEntity="Brand")
* @ORM\JoinColumn(name="brands_id", referencedColumnName="id")
*/
protected $brand;
...
}
class Email
{
/**
* @ORM\ManyToMany(targetEntity="Message", inversedBy="messageXrefMail", cascade={"persist", "remove"})
* @ORM\JoinTable(name="emails_messages_xref",
* joinColumns={@ORM\JoinColumn(name="emails_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="messages_id", referencedColumnName="id")}
* )
*/
protected $emailsMessageXref;
...
}
我需要获取与email 相关的brands,但在这种情况下我不知道该怎么做。主查询中包含一些表,我得到了这个:
public function findEmailValues($eid)
{
$qb = $this->_em->createQueryBuilder();
$qb->select('e.id', 'r.id')
->from('PDOneBundle:Email', 'e')
->leftJoin('PDOneBundle:Representative', 'r', \Doctrine\ORM\Query\Expr\Join::WITH, 'e.rep = r.id')
->leftJoin('PDOneBundle:Territory', 't', \Doctrine\ORM\Query\Expr\Join::WITH, 'r.territory = t.id')
->leftJoin('PDOneBundle:Target', 'tg', \Doctrine\ORM\Query\Expr\Join::WITH, 't.id = tg.territory')
->where('e.id = :eid')
->setParameter('eid', $eid);
return $qb->getQuery()->getSingleResult();
}
但我不知道从那里去哪里。我可以在构建 DQL 时获得一些帮助吗?
【问题讨论】:
-
品牌和邮箱的关系怎么样?
-
@Richard 这两者之间没有关系
-
您问的是如何获取与电子邮件相关的品牌,您的意思是通过电子邮件 -> 消息 -> 品牌关系?
-
@Richard 正是我所要求的
标签: php symfony doctrine-orm dql symfony-2.6