簡體   English   中英

Symfony Doction QueryBuilder在Join上添加where子句

[英]Symfony Doctrine QueryBuilder add where clause on Join

我有一個查詢生成器,具有以下選擇:

$starterRepository = $this->getDoctrine()
                          ->getManager()
                          ->getRepository('CatalogBundle:Starter');

$query = $starterRepository->createQueryBuilder('s')
                           ->where('s.active = 1')
                           ->orderBy('s.voltage, s.power, s.serial');

它選擇表“ starters”,但是在Starter.php中,我有一個關聯“ references”,如下所示:

 /**
 * @var ArrayCollection
 *
 * @ORM\ManyToMany(targetEntity="StarterReference", inversedBy="starters")
 * @ORM\JoinTable(name="starters_references")
 */
protected $references;

因此,在查詢結果中,我同時具有“ starters”和“ starters_references”表。 1個起動器有許多起動器參考。 現在的問題是,我不需要選擇所有的入門參考,而是僅選擇那些在名為“ ref_usage”的列中具有某些值的參考。

所以我需要在查詢中寫where子句,我正在嘗試這樣做:

->where('reference.ref_usage = 1')

但是通過這種方式,我只能得到一個“入門”項目,其中包含了所有引用。 我需要所有入門項目,但只需要帶有ref_usage 1的引用。

有任何想法嗎?

這是我正在使用的完整文件和功能。

控制器功能: http : //pastebin.com/0tTEcQbn

實體“ Starter.php”: http ://pastebin.com/BFLpKtec

實體“ StarterReference.php”: http ://pastebin.com/Kr9pEMEW


編輯:這是我得到的查詢,如果我使用:

->where('reference.ref_usage = 1')

SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id0 FROM (SELECT s0_.id AS id0, s0_.serial AS serial1, s0_.voltage AS voltage2, s0_.power AS power3, s0_.rotation AS rotation4, s0_.teeth AS teeth5, s0_.module AS module6, s0_.b_terminal AS b_terminal7, s0_.comment AS comment8, s0_.commenten AS commenten9, s0_.commentru AS commentru10, s0_.commentpl AS commentpl11, s0_.commentde AS commentde12, s0_.commentes AS commentes13, s0_.type AS type14, s0_.adaptation AS adaptation15, s0_.alternative_product_1 AS alternative_product_116, s0_.alternative_product_2 AS alternative_product_217, s0_.alternative_product_3 AS alternative_product_318, s0_.alternative_product_4 AS alternative_product_419, s0_.active AS active20 FROM starters s0_ INNER JOIN starters_references s2_ ON s0_.id = s2_.starter_id INNER JOIN starter_reference s1_ ON s1_.id = s2_.starterreference_id WHERE s0_.active = 1 AND s1_.ref_usage = 1 ORDER BY s0_.voltage ASC, s0_.power ASC, s0_.serial ASC) dctrn_result) dctrn_table

如您所見,它將ref_usage = 1添加到where子句。 但是問題是我在這里不需要它,只需要在內部加入引用時檢查ref_usage即可。

您應該在查詢中加入引用,然后添加where子句。

$query = $starterRepository->createQueryBuilder('s')
                       ->join('s.references', 'reference')
                       ->where('s.active = 1')
                       ->andwhere('reference.ref_usage = 1')
                       ->orderBy('s.voltage, s.power, s.serial');

暫無
暫無

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

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