【问题标题】:How to return an array not an object with doctrine findOneBy method in symfony2?如何在 symfony2 中使用学说 findOneBy 方法返回数组而不是对象?
【发布时间】:2014-05-15 14:43:29
【问题描述】:

我有一种情况,我想使用 symfony2 中的学说中的 findOneBy($id) 方法查询数据库。

$namePosting = $this->getDoctrine()->getRepository('MyBundle:Users')->findOneById($userPosting);

结果它是一个具有受保护属性的对象。我想直接返回一个数组。如何才能做到这一点 ?

【问题讨论】:

    标签: php arrays symfony doctrine


    【解决方案1】:

    findOneBy(array()) 将始终返回 null 或对象。

    但你可以改用findById($userPosting)findBy(array('id' => $userPosting)),它会返回一个数组,例如:

    $this->getDoctrine()->getRepository('MyBundle:Users')->findById($userPosting))
    

    已编辑

    或者你可以在UserRepository类中添加一个方法:

        use Doctrine\ORM\EntityRepository;
        use Doctrine\ORM\Query;
    
        class UserRepository extends EntityRepository
        { 
            public function getUser($userPosting)
            {
               $qb = $this->createQueryBuilder('u')
                 ->select('u')
                 ->where('u =:userPosting')->setParameter('userPosting', $userPosting)
                 ->getQuery()
                 ->getResult(Query::HYDRATE_ARRAY);
    
               return $qb;
            }   
        }
    

    【讨论】:

    • 嗯,是的,结果它被卡在了一个数组中,但里面是相同的(一个具有受保护属性的对象),看:pastebin.com/MtrJgzJ9 例如,我如何访问“名字”?
    • 如果你有 $user = $this->getDoctrine()->getRepository('MyBundle:Users')->findById($userPosting));名字将是 $user->getFirstname(); (假设您在名为 getFirstname() 的用户实体类中有一个 getter
    • 那是完美的。您可以访问这样的属性,但是如果您想将转换为数组的整个对象返回怎么办?你可以直接这样做,还是需要使用 symfony 的序列化程序?
    • 您可以在您的存储库中创建自定义查询并在其上调用 getResult(Querry::HYDRATE_ARRAY)。请查看我编辑的帖子。
    • 您可以使用 getOneOrNullResult(Query::HYDRATE_ARRAY) 代替 getResult(Query::HYDRATE_ARRAY)
    猜你喜欢
    • 2015-04-09
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 2015-05-10
    相关资源
    最近更新 更多