php - 教义查询:创建连接三个表的选择查询的最佳方法?
问题描述
我需要加入三个表来提取结果集,但我不确定是否应该使用 createQueryBuilder、createNativeQuery 或其他方法。
我的三张桌子是
- 电子邮件(通过字段加入成员:成员)
- 成员(通过字段加入公司:current_company)
- 公司
实体在代码中正确注释。例如在电子邮件实体中:
/**
* @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 等?
解决方案
更新,我能够使用普通的旧 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();
推荐阅读
- amazon-web-services - 当 DMS 任务尝试使用外键截断表时,AWS RDS 的夜间复制失败
- snowflake-cloud-data-platform - 从 DataStage 更新 Snowflake 中的表需要很长时间才能完成
- javascript - 如何在反应式表单中获取表单控件的名称?
- r - 访问列表并将它们保存到文件中
- flutter - 在画布上绘制描边/带边框的文本
- javascript - 无法在 Google Chrome 上下载文件。同样在 Mozilla 上工作
- java - 为什么在 catch 块中使用 sc.next()?
- kubernetes - ~/.kube/config 中的“preferences: {}”有什么作用?
- kql - 任何使用 KQL 到 ElasticSearch 的接口?
- python - Webdriver manager ValueError:无法使用此命令获取 Chrome 的版本