Php ZF2 Doctrine2存储库结果为数组

Php ZF2 Doctrine2存储库结果为数组,php,doctrine-orm,zend-framework2,Php,Doctrine Orm,Zend Framework2,我有个问题,我有两个控制器。一个是restful控制器,它只处理json数据并返回JsonModel,另一个是默认控制器,它返回ViewModel 现在我有一个问题,我的方法只返回实体的数组,这对于默认控制器是正确的,但是我的restful控制器需要实体作为数组。我该怎么办 MealController class MealController extends AbstractRestfulController { protected $mealService; public

我有个问题,我有两个控制器。一个是restful控制器,它只处理
json
数据并返回
JsonModel
,另一个是默认控制器,它返回
ViewModel
现在我有一个问题,我的方法只返回实体的
数组
,这对于默认控制器是正确的,但是我的restful控制器需要实体作为数组。我该怎么办

MealController

class MealController extends AbstractRestfulController {
    protected $mealService;

    public function getList() {
        $meals = $this->mealService->getAllMeals();

        return new JsonModel($meals);
    }
}
MealService

class MealService {
    protected $mealRepository;

    public function getAllMeals() {
        return $this->mealRepository->findAll();
    }
}
MealRepository

class MealRepository extends EntityRepository {
    public function findAll() {
        $queryBuilder = $this->createQueryBuilder('meal')
            ->orderBy('title');

        return $queryBuilder->getQuery()->getResult();
    }
}
你可以用它。它允许在执行查询时指定水合模式,并更改返回结果的数据类型。您只需要在
getResult()
方法中使用常量
Query::hydrome\u ARRAY
作为参数:

public function findAll() {
    $queryBuilder = $this->createQueryBuilder('meal')
        ->orderBy('title');

    return $queryBuilder->getQuery()->getResult(Doctrine\ORM\Query::HYDRATE_ARRAY);
}
也许您还可以看看这个类,它允许您从一个实体创建一个json数组:

$entitySerializer = new EntitySerializer($em);
$entityAsArray = $entitySerializer->toArray($entity);

希望这有帮助。

数组看起来不错,但这样,该方法总是返回一个数组。但在我的服务方法“GetAllFines”和存储库方法“findAll”中添加参数$hydration也会让人感到奇怪,或者这是正确的方法吗?所以我会有:
公共函数getAllFinds($hydration=Doctrine\ORM\Query::hydration\u OBJECT);公共函数findAll($hydration=Doctrine\ORM\Query::hydration\u OBJECT)我不知道是否有更好的方法,但是的,你最终可以这样做,这并不奇怪;-)好的,我就这样做!谢谢;-)