我需要加入三个表来提取结果集,而且我不确定是否应该使用createQueryBuilder,createNativeQuery或其他方法。
我的三个桌子是
在代码中正确注释了实体。例如 在电子邮件实体中:
/**
* @ORM\ManyToOne(targetEntity="Member")
* @ORM\JoinColumn(name="member", referencedColumnName="id", nullable=true)
*/
protected $member;
在成员实体中:
/**
* @ORM\ManyToOne(targetEntity="Company")
* @ORM\JoinColumn(name="current_company", referencedColumnName="id", nullable=true)
*/
protected $current_company;
在公司实体中:
/**
* @ORM\ManyToMany(targetEntity="Member", mappedBy="companies")
*/
protected $members;
我需要做的是从电子邮件中提取一组记录,其中成员都与一个公司相关联。
MySQL中的以下SQL返回了我需要的内容,但是我是Doctrine的新手,并且不知道如何最好地将此查询转换为Doctrine可以用来提取相同结果的内容:
select e.* from email e
join member m on m.id = e.member
join company c on c.id = m.current_company
where m.current_company = '95f1b5a4-03c9-11e9-85b1-989096db2d5f';
任何人都可以提供帮助,以及应该采用哪种方法createQueryBuilder,createNativeQuery等?
答案 0 :(得分:0)
更新,我能够使用普通的旧SQL使其正常工作,但是我不确定这在Doctrine世界中是否可以接受。欢迎有经验的人士提出意见和建议!
$conn = $this->em->getConnection();
$sql = "select e.* from fitchek.email e join fitchek.member m on m.id = e.member join fitchek.company c on c.id = m.current_company where m.current_company = ?";
$stmt = $conn->prepare($sql);
$stmt->bindValue(1, $company_uuid);
$stmt->execute();