簡體   English   中英

原則查詢:創建連接三個表的選擇查詢的最佳方法?

[英]Doctrine query: best approach to creating a select query joining three tables?

我需要加入三個表來提取結果集,但是我不確定是否應該使用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(); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM