ZF2 Doctrine2 存储库结果作为数组

ZF2 Doctrine2 repository result as array

我有两个控制器的问题。一个是 restful 控制器,它只处理 json 数据和 returns 一个 JsonModel,另一个是默认控制器,它 returns 一个 ViewModel 现在我遇到了问题,我的方法只有 returns 个 array 实体,这对于默认控制器是正确的,但是我的 restful 控制器需要实体作为数组。我该如何处理?

膳食控制器

class MealController extends AbstractRestfulController {
    protected $mealService;

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

        return new JsonModel($meals);
    }
}

餐饮服务

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();
    }
}

你可以用 Array Hydration。它允许在执行查询时指定水合模式,并更改返回结果的数据类型。您只需要在 getResult() 方法中使用常量 Query::HYDRATE_ARRAY 作为参数:

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

    return $queryBuilder->getQuery()->getResult(Doctrine\ORM\Query::HYDRATE_ARRAY);
}

也许您还可以查看 EntitySerializer class,它可以让您从一个实体创建一个 json 的数组:

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