在 symfony2 中使用 DQL 从实体获取自定义 getter 值
Getting custom getter values from Entity with DQL in symfony2
我正在使用 FOSUserBundle 和 FOSRestBunldle 与 Symfony 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()
{
我正在使用 FOSUserBundle 和 FOSRestBunldle 与 Symfony 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()
{