在 symfony2 中使用 DQL 从实体获取自定义 getter 值

Getting custom getter values from Entity with DQL in symfony2

我正在使用 FOSUserBundleFOSRestBunldleSymfony 2.8 并且必须得到一个带有年龄的简短用户列表,但是用户数据库中没有字段 'age',这就是为什么我的用户实体 class 具有此自定义 getter 来根据生日字段计算年龄的原因

public function getAge()
{
    $now = new \DateTime('now'); 
    $age = $this->birthdate->diff($now);
    return $age->format('%y');
}

但是,使用 "u.age" 获取我的用户列表并将其序列化为 json 是行不通的,因为没有与 u.age[= 关联的真实字段33=]

$query = $em->createQuery('SELECT u.username, u.age FROM AppBundle:User u');
$users = $query->getResult();

将存储库与 ->findAll() 一起使用会过时,但也会加载许多其他相关实体(帖子、用户的评论),这些实体在这里不需要,并且会有点过载。

我怎样才能得到我的用户列表,只包含他们的用户名和相应的年龄

感谢您的帮助!

您在数据库中没有 age 字段,这也意味着您在 Doctrine 映射中没有它,因此您不能 select 它。 Doctrine对此一无所知。

您需要 select 在实体实例中计算它所需的数据。在这种情况下,为了计算用户的年龄,您可能需要 select 生日日期。

例如:

$query = $em->createQuery('SELECT u.username, u.birthday FROM AppBundle:User u');
$users = $query->getResult();

然后您应该能够在 PHP 代码中从您的实体获取年龄。

我找到了解决办法。使用注释 @VirtualProperty 告诉序列化程序获取值。

use JMS\Serializer\Annotation\VirtualProperty;

必须包含在实体 class 中,因此注释有效。

/**   
 * @VirtualProperty 
 */
public function getAge()
{