Php 添加计算字段

Php 添加计算字段,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,现在我有一个Profile实体,它与Address实体有1:1的关系 如果我创建以下简单查询 $this->qb = $this->_em->createQueryBuilder() ->select('e') ->from($this->_entityName, 'e') ; 它会返回如下数据: firstname: Test lastname: Bla gender: male dateOfBirth: '1972-03-14' addr

现在我有一个Profile实体,它与Address实体有1:1的关系

如果我创建以下简单查询

$this->qb = $this->_em->createQueryBuilder()
    ->select('e')
    ->from($this->_entityName, 'e')
;
它会返回如下数据:

firstname: Test
lastname: Bla
gender: male
dateOfBirth: '1972-03-14'
address:
    city: Brussel
    country: BE
$this->qb = $this->_em->createQueryBuilder()
    ->select('e','YEAR(CURRENT_DATE()) - YEAR(e.dateOfBirth) AS age')
    ->from($this->_entityName, 'e')
;
这正是我想要的,但现在我想添加一个年龄字段。 当我这样做时,它会起作用:

firstname: Test
lastname: Bla
gender: male
dateOfBirth: '1972-03-14'
address:
    city: Brussel
    country: BE
$this->qb = $this->_em->createQueryBuilder()
    ->select('e','YEAR(CURRENT_DATE()) - YEAR(e.dateOfBirth) AS age')
    ->from($this->_entityName, 'e')
;
但结果是:

0:
    firstname: Test
    lastname: Bla
    gender: male
    dateOfBirth: '1972-03-14'
    address:
        city: Brussel
        country: BE
age: '42'
因此,它将年龄放在不同的结果中,并将实体中的所有数据放在0键中。 现在,我如何使年龄成为实体数据的一部分

我希望它是这样的:

firstname: Test
lastname: Bla
gender: male
dateOfBirth: '1972-03-14'
age: 36
address:
    city: Brussel
    country: BE
而且,由于JMSSerializer,目前的结果是这样的,实体中有更多字段没有序列化,但它们仍然从数据库中获取。。。
有什么方法可以让我在保持相同结果的同时只检索所需的字段吗?

您可以向您的
档案
实体添加一个助手方法,该方法将返回计算年龄:

public function getAge()
{
    // calculate age here

    $age = ..... ;

    return $age;
}

为什么不修改序列化以按需计算年龄?如果需要,还可以为此添加一个伪成员和相应的getter。目前,条令无法动态添加成员。是的,我可以这样做,我只是想知道是否有可能在条令级别这样做,因为我需要在那里计算它,以便按年龄筛选用户。这样可以吗?-它似乎解释了如何使用特征以及如何动态添加条令映射。但关于将sql选择创建的动态列合并到结果集的内容却没有。但是无论如何thx:)我现在只是像你建议的那样使用getter函数,并使用serializer将其添加到实体中。如果计算的值是一个复杂表达式的结果,你希望在数据库中而不是在PHP中执行该操作,那么该怎么办?