【问题标题】:Getting custom getter values from Entity with DQL in symfony2在 symfony2 中使用 DQL 从实体获取自定义 getter 值
【发布时间】:2016-08-28 19:15:44
【问题描述】:

我在 Symfony 2.8 中使用 FOSUserBundleFOSRestBunldle 并且必须获得一个随年龄增长的简短用户列表,但是没有字段用户数据库中的“年龄”,这就是为什么我的用户实体类有这个自定义 getter 来计算出生日期字段的年龄

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() 一起使用会得到年龄,但还会加载许多其他相关实体(用户的帖子、cmets),这些实体在这里不需要,而且会有点过载。

我怎样才能获得我的用户列表,其中只有他们的用户名和相应的年龄

感谢您的帮助!

【问题讨论】:

    标签: symfony doctrine-orm fosuserbundle dql fosrestbundle


    【解决方案1】:

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

    use JMS\Serializer\Annotation\VirtualProperty;
    

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

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

    【讨论】:

      【解决方案2】:

      你在 DB 中没有 age 字段,这也意味着你在 Doctrine 映射中没有它,因此你不能选择它。教义对此一无所知。

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

      例如:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-27
        • 2014-02-09
        • 1970-01-01
        相关资源
        最近更新 更多