条令查询:创建连接三个表的select查询的最佳方法?

gmxoilav  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(343)

我需要连接三个表来提取结果集,我不确定是否应该使用createquerybuilder、createnativequery或其他方法。
我的三张table是
电子邮件(通过域加入到成员:成员)
成员(通过字段加入公司:当前公司)
公司
这些实体在代码中有正确的注解。例如,在电子邮件实体中:

/**
     * @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返回了我需要的内容,但我对条令还不熟悉,不知道如何最好地将此查询转换为条令可以用来提取相同结果的内容:

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等应该采用哪种方法?

s2j5cfk0

s2j5cfk01#

更新后,我可以使用普通的老式sql让它工作,但我不确定这在理论界是否是一个可接受的解决方法。欢迎有经验者提出意见和建议!

$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();

相关问题