我正在使用 Symfony 和 Doctrine。 我有两个具有多对一关系的实体:服务和组。 我想设置一个特定的查询,从中获取我的服务的一些属性及其组名。不幸的是,s.name 和 g.name 是冲突的,我得到最后设置的那个。 我怎样才能同时获得两者?
public function findRest($parameters)
{
// Initiate the query
$qb = $this->createQueryBuilder('s')
->select('s.id')
->addSelect('s.mnemonicCode')
->addSelect('g.name')
->addSelect('s.name')
->addSelect('s.definitionShort')
->addSelect('s.definitionClient')
->addSelect('s.updatedOn')
;
// Add joined tables
$qb->join('s.group', 'g');
// Set conditions depending on optional JSON parameters
if (!empty($parameters->id)) {
$qb->andWhere('s.id = :id')
->setParameter('id', $parameters->id);
}
if (!empty($parameters->mnemonicCode)) {
$qb->andWhere('s.mnemonicCode = :mnemonicCode')
->setParameter('mnemonicCode', $parameters->mnemonicCode);
}
return $qb
->getQuery()
->getResult();
}
返回的是这种情况:
{
"id": 1,
"mnemonicCode": "TPADFI-COMCOL",
"name": "service name",
"definitionShort": "the short definition",
"definitionClient": "This is a long definition",
"updatedOn": {
"date": "2016-09-29 15:04:21.000000",
"timezone_type": 3,
"timezone": "UTC"
}
},
如您所见,我想念组名。
如果我将 ->addSelect('g.name')
放在 ->addSelect('s.name')
之后,那么只会报告组名。
最佳答案
你可以只为你的名字添加别名(g.name AS group_name
和 s.name AS service_name
):
$qb = $this->createQueryBuilder('s')
->select('s.id')
->addSelect('s.mnemonicCode')
->addSelect('g.name AS group_name')
->addSelect('s.name AS service_name')
->addSelect('s.definitionShort')
->addSelect('s.definitionClient')
->addSelect('s.updatedOn')
;
你会得到这个返回:
{
"id": 1,
"mnemonicCode": "TPADFI-COMCOL",
"group_name": "group name",
"service_name": "service name",
"definitionShort": "the short definition",
"definitionClient": "This is a long definition",
"updatedOn": {
"date": "2016-09-29 15:04:21.000000",
"timezone_type": 3,
"timezone": "UTC"
}
},
关于php - 具有相同字段名称的 Doctrine 查询生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45391867/