ZF2 Doctrine2存储库结果为数组

时间:2015-04-09 11:47:32

标签: php doctrine-orm zend-framework2

我有问题,我有两个控制器。一个是一个宁静的控制器,只处理json数据并返回JsonModel,另一个是默认控制器,返回ViewModel 现在我遇到了问题,我的方法只返回array个实体,这对于默认控制器是正确的,但我的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();
    }
}

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

希望这有帮助。