2016-11-16 59 views
0

我在user_has_client子實體和client父實體之間存在多對一的關係。從連接查詢中獲取父實體

這裏是user_has_client表:

MariaDB [extrapack]> desc user_has_client; 
+-----------+------------------+------+-----+---------+-------+ 
| Field  | Type    | Null | Key | Default | Extra | 
+-----------+------------------+------+-----+---------+-------+ 
| user_id | int(10) unsigned | NO | PRI | NULL |  | 
| client_id | int(10) unsigned | NO | PRI | NULL |  | 
+-----------+------------------+------+-----+---------+-------+ 

我想從涉及的user_has_client子實體的user_id查詢返回client父實體的名單。

我第一次這樣嘗試之一:

$query = $this->getEntityManager()->createQueryBuilder() 
->select('c') 
->from('Application\Entity\UserHasClient', 'uc') 
->innerJoin('uc.client', 'c') 
->where('uc.user_id = :user_id') 
->setMaxResults(10) 
; 
$query->setParameters(array('user_id' => $user_id)); 

它給了我下面的錯誤:

[Semantical Error] line 0, col -1 near 'SELECT c 
    ': Error: Cannot select entity through identification variables without choosing at least one root entity alias. 

,然後試圖這樣一條:

$query = $this->getEntityManager()->createQuery(
    "SELECT c.client_id 
    FROM Application\Entity\UserHasClient u 
    INNER JOIN u.client c 
    WHERE u.user_id = {$user_id}"); 

它給了我同樣的錯誤:

Semantical Error] line 0, col -1 near 'SELECT c FROM': Error: Cannot select entity through identification variables without choosing at least one root entity alias. 
+1

的關係是雙向的?換句話說,客戶是否持有關係的反面? – Wilt

+0

我認爲這不是,但實際上是。 – Stephane

回答

0

如果關係是雙向的,你可以使用這樣的查詢:

$query = $this->getEntityManager()->createQueryBuilder() 
    ->select('c') 
    ->from('Application\Entity\Client', 'c') 
    ->innerJoin('c.userHasClient', 'uc') 
    ->where('uc.user_id = :user_id') 
    ->setMaxResults(10); 
$query->setParameters(array('user_id' => $user_id)); 
0

我發現了關於客戶端上的用戶屬性,意味着這種關係是雙向的。

所以,我可以接着用下面的查詢訪問數據:

$query = $this->getEntityManager()->createQueryBuilder() 
->select('c') 
->from('Application\Entity\Client', 'c') 
->innerJoin('c.users', 'u') 
->andWhere("u.user_id = {$user_id}") 
->orderBy('c.title', 'ASC') 
->setMaxResults(10); 
return $query->getQuery()->getArrayResult();