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);
我有两个控制器的问题。一个是 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);