2012-10-19 80 views
2

一個分支可能有許多客戶,客戶可能與許多分支有關。所以這是一個多對多的關係。在原則中使用SQL IN語句過濾器查詢

科:

<many-to-many target-entity="Customer" inversed-by="branches" field="customers"/> 

客戶:

<many-to-many field="branches" target-entity="Branch" mapped-by="customers"/> 

現在我想下面的查詢來執行:選擇客戶的分支定分支對象匹配的所有客戶。

這是我的嘗試:

$branch = $em->getRepository('MyBundle:Branch') 
       ->findOneById($bid); 

    $qb->select(array('c')) 
    ->from('MyBundle:Customer', 'c') 
    ->where($qb->expr()->in('c.branches', $branch)) 
    ->andWhere('c.delted = 0') 
    ->getQuery(); 

所以我的想法是,在語句中使用。但這不起作用。

錯誤:

Fatal error: Object of class DateTime could not be converted to string ..Query\Expr\Func.php on line 48

任何想法如何做到這一點的正確方法?

+0

你應該能夠做到這一點,只是用實體:$科順> GetCustomers的();和主義會關心其餘的。 (除非你想添加一些額外的條件?)或者我錯過了什麼? – Cyprian

+0

我知道,但我將查詢傳遞給一個分頁器,該分頁器期望一個查詢而不是一組對象 –

回答

2

試加加入您的查詢:

$qb->select(array('c', 'b')) 
    ->from('MyBundle:Customer', 'c') 
    ->join('c.branches', 'b') 
    ->where('b IN (:branch)') 
    ->andWhere('c.deleted = 0') 
    ->setParameter('branch', array($branch)) 
    ->getQuery(); 
+0

+1像一個魅力一樣工作!謝謝! –