从连接查询中获取父实体
Get the parent entities from a join query
我在 user_has_client
子实体和 client
父实体之间存在多对一关系。
这里是 user_has_client
table:
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
的查询中 return 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.
我在客户端发现了用户 属性,这意味着关系是双向的。
所以我可以通过以下查询访问数据:
$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();
如果关系是双向的,您可以使用这样的查询:
$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));
我在 user_has_client
子实体和 client
父实体之间存在多对一关系。
这里是 user_has_client
table:
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
的查询中 return 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.
我在客户端发现了用户 属性,这意味着关系是双向的。
所以我可以通过以下查询访问数据:
$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();
如果关系是双向的,您可以使用这样的查询:
$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));