2014-12-08 48 views
2

我有一個實體範疇,而這一類具有自身的遞歸關係,其中每個類別可以是父母等幾個類別。的關係是這樣的:查詢生成器,一對多,其中很多是空的

/** 
* @var parent 
* @ORM\ManyToOne(targetEntity="Category") 
* @ORM\JoinColumn(referencedColumnName="id", onDelete="CASCADE") 
*/ 
private $parent; 

/** 
* @ORM\OneToMany(targetEntity="Category", mappedBy="parent") 

*/ 
private $children; 

我需要做一個查詢生成器查詢其選擇要麼是兒童(有父),或沒有父母,也沒有孩子類別的所有類別(換句話說除了有孩子的父母以外的所有類別)我似乎無法做到這一點。請幫忙。

回答

0

下一步需要DQL查詢:

$query = 'SELECT c FROM AcmeBundle:Category c LEFT JOIN c.parent p LEFT JOIN c.children ch WHERE p IS NOT NULL OR (ch IS NULL AND p IS NULL)'; 

如果你需要爲這個查詢QueryBuilder的序列可以使用下面的代碼:

$qb = $em->createQueryBuilder(); 
$query = $qb 
    ->select('c') 
    ->from('AcmeBundle:Category', 'c') 
    ->leftJoin('c.parent', 'p') 
    ->leftJoin('c.children', 'ch') 
    ->where($qb->expr()->orX(
     $qb->expr()->isNotNull('p'), 
     $qb->expr()->andX(
      $qb->expr()->isNull('ch'), 
      $qb->expr()->isNull('p'), 
     ) 
    )) 
    ->getQuery(); 
+0

我解決它通過witing SQL查詢和重寫我的形式和我的廢話控制器(整個一塌糊塗)就這樣完成了。但出於好奇,我想看看查詢生成器的樣子。如果我能做查詢生成器,我可以直接在表單中傳遞它。 – 2014-12-08 14:17:11

+0

變得懂事了我意識到,你的答案是正確的,以及:) – 2015-06-01 14:48:49

+0

很高興聽到它:-) – 2015-06-02 08:34:02