Doctrine添加计算字段

时间:2014-10-15 14:53:40

标签: php symfony doctrine-orm

现在我有一个与地址实体具有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')
;

但结果最终是:

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,实体中有更多的字段没有被序列化,但它们仍然是从数据库中取出的...... 有什么方法可以让教条只检索所需的字段,同时保持相同的结果?

1 个答案:

答案 0 :(得分:1)

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

public function getAge()
{
    // calculate age here

    $age = ..... ;

    return $age;
}