我使用 FOSUserBundle 和 FOSRestBunldle 与 Symfony 2.8 ,并且必须获得一个带有年龄的短用户列表,但是没有字段'年龄'在用户数据库中,这就是为什么我的User实体类有这个自定义getter来从birthdate字段计算年龄
public function getAge()
{
$now = new \DateTime('now');
$age = $this->birthdate->diff($now);
return $age->format('%y');
}
使用" u.age"获取我的用户列表并将其序列化为json然而,不起作用,因为没有与 u.age 相关联的真实字段
$query = $em->createQuery('SELECT u.username, u.age FROM AppBundle:User u');
$users = $query->getResult();
使用具有->findAll()
的存储库可以获得年龄,但也会加载许多其他相关实体(用户的帖子,评论),这些在这里不需要,并且会有点过载。
如何只使用用户名和年龄来获取用户列表?
谢谢你的帮助!
答案 0 :(得分:2)
您在DB中没有age
字段,这也意味着您在Doctrine映射中没有该字段,因此您无法选择它。学说对此一无所知。
您需要选择在实体实例中计算它所需的数据。在这种情况下,为了计算用户的年龄,您可能想要选择生日日期。
E.g:
$query = $em->createQuery('SELECT u.username, u.birthday FROM AppBundle:User u');
$users = $query->getResult();
然后你应该能够在PHP代码中从你的实体中获得年龄。
答案 1 :(得分:2)
我找到了解决方案。使用注释@VirtualProperty告诉序列化器获取值。
use JMS\Serializer\Annotation\VirtualProperty;
必须包含在Entity类中,因此注释可以正常工作。
/**
* @VirtualProperty
*/
public function getAge()
{