繁体   English   中英

symfony doctrine-> findBy(),是否可以在不使用存储库方法的情况下返回可解析的PHP数组?

[英]symfony doctrine-> findBy(), Can I return a parsable PHP array without using the repository method?

如果使用此方法检索数据,则无法像$data[0]['string']这样在PHP中对其进行解析。 PHP只是说这是一个Object ,不能将其解析为Array

错误信息

Cannot use object of type App\\Entity\\MyEntity as array

控制器代码:

$data = $this->em
     ->getRepository(Myclass::class)
     ->findBy(['foo' => $var]);

我如何直接从控制器直接从简单的findBy()返回可解析数组,而不必通过->getArrayResult()遍历存储库和QueryBuilder?

您需要做的就是在存储库中创建自定义函数:

public function findItByFoo($var){
        $qb = $this->createQueryBuilder('myClass');
        $qb->select("myClass")
            ->where('foo = :var')
            ->setParameter('var', $var);
        $result = $qb->getQuery()->getArrayResult();
        return $result;
}

您无法使用内置的findBy方法实现此目的。 更具体地说,findBy定义为:

$repository->findBy(array $criteria, array $orderBy = null, $limit  = null, $offset = null);

如您所见,水合模式没有任何论据。

最后,由于要将实体化为数组而不是对象,并且希望在控制器中做到这一点,因此唯一的解决方案是这样的:

$data = $this->em->getRepository(Myclass::class)->createQueryBuilder('m')
            ->select("m")->where('foo = :var')->setParameter('var', $var)
            ->getQuery()->getArrayResult();

如您所见,它与我上面编写的findItByFoo()函数中的代码几乎相同,我只是想标记一下您也可以在控制器中做到这一点(以编程方式来说,甚至不建议这样做)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM