Doctrine添加计算字段

Aai*_*ike 6 php symfony doctrine-orm

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

如果我创建以下简单查询

$this->qb = $this->_em->createQueryBuilder()
    ->select('e')
    ->from($this->_entityName, 'e')
;
Run Code Online (Sandbox Code Playgroud)

它返回一些这样的数据:

firstname: Test
lastname: Bla
gender: male
dateOfBirth: '1972-03-14'
address:
    city: Brussel
    country: BE
Run Code Online (Sandbox Code Playgroud)

这正是我想要的,但现在我想添加一个年龄字段.当我这样做时它会起作用:

$this->qb = $this->_em->createQueryBuilder()
    ->select('e','YEAR(CURRENT_DATE()) - YEAR(e.dateOfBirth) AS age')
    ->from($this->_entityName, 'e')
;
Run Code Online (Sandbox Code Playgroud)

但结果最终是:

0:
    firstname: Test
    lastname: Bla
    gender: male
    dateOfBirth: '1972-03-14'
    address:
        city: Brussel
        country: BE
age: '42'
Run Code Online (Sandbox Code Playgroud)

因此,它将年龄放在不同的结果中,并将实体中的所有数据放在0键中.现在我怎样才能使它成为实体数据的一部分?

这就是我希望它:

firstname: Test
lastname: Bla
gender: male
dateOfBirth: '1972-03-14'
age: 36
address:
    city: Brussel
    country: BE
Run Code Online (Sandbox Code Playgroud)

而且结果目前是这样的,因为JMSSerializer,实体中有更多的字段没有被序列化但是它们仍然从数据库中取出...有什么方法可以让doctrine只检索所需的在保持相同结果的同时?

dmn*_*ptr 0

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

public function getAge()
{
    // calculate age here

    $age = ..... ;

    return $age;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果计算值是您希望在数据库而不是 PHP 中执行的复杂表达式的结果,该怎么办? (14认同)