簡體   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