php - 具有相同字段名称的 Doctrine 查询生成器

标签 php symfony doctrine-orm

我正在使用 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_names.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/

相关文章:

php - 页面加载缓慢

symfony - 如何将Tinymce与Symfony encore集成?

Symfony,在 Controller 中强制注销

doctrine-orm - Doctrine 2 - 如何添加 CHECK .. IN 约束

php - 删除表在 tfoot 和 thead 内的边框

php - 加载数据 infile 默认值不插入表

即使我已经指定了使用类,也找不到 PHP 命名空间和使用 fatal error 类

symfony - PHPunit、Symfony2 和 AWS SDK - 无法加载 APC 或 xcache

postgresql - 使用 Doctrine2 和 PostgreSQL 的多数据库架构和迁移

php - Symfony3 Doctrine 使用时区