Symfony 2.8:显示数组集合的 DQL 查询
Symfony 2.8 : DQL query to display an arraycollection
我是 Symfony 2 的初学者,我遇到 DQL 查询问题:我正在尝试显示一个 属性 数组集合。
这是我的案例:两个 类 与 "ManyToOne" 和 "OneToMany"
连接在一起
DishGrade.php :
/**
* @var Dish $dish
*
* @ORM\ManyToOne(targetEntity="Dish", inversedBy="grades",
cascade={"persist", "remove", "merge"})
* @ORM\JoinColumn(name="dish_id", referencedColumnName="id", nullable=false)
*
*/
private $dish;
Dish.php :
/**
* @var \Doctrine\Common\Collections\Collection $grades
*
* @ORM\OneToMany(targetEntity="DishGrade", mappedBy="dish", cascade={"all"},
orphanRemoval=true)
*/
private $grades;
然后这是我的控制器,其中 returns 一组对象 "DishGrade"
/**
* Get grades dish.
*
*
* @ApiDoc(
* output = "Awadac\ApiBundle\Model\Dish",
* statusCodes = {
* 200 = "Returned when successful",
* 404 = "Returned when the dish is not found"
* }
* )
*
* @Get("/dishes/{id}")
*
* @param Request $request the request object
* @param int $id the dish id
*
* @return array
*
* @throws NotFoundHttpException when dish not exist
*/
public function getDishAction(Request $request, $id)
{
$dish = $this->getDishManager()->getRepository()->getGrades($id);
if (!$dish) {
throw $this->createNotFoundException('Dish does not exist.');
}
return $dish;
}
我的查询无效:
DishRepository.php :
public function getGrades($id){
$qb = $this->_em->createQueryBuilder();
return $qb->select('d.grades')
->from('AwadacApiBundle:Dish', 'd')
->where('d.id = :id')
->setParameter('id', $id)
->getQuery()
->getResult();
}
我得到的错误代码:
{"code":500,"message":[语义错误] 第 0 行,'grades FROM AwadacApiBundle:Dish' 附近的第 9 栏:错误:无效的 PathExpression。必须是 StateFieldPathExpression。","errors":null}
当我想从我的对象 "Dish" 中获取所有属性时,它起作用了,所以我只是想知道为什么我不能单独显示这个 ArrayCollection。
感谢您的宝贵时间!
如果您已经在 DishRepository 中,您将能够通过
创建查询生成器
$qb = $this->createQueryBuilder('d');
此外只需删除 ->from() 语句,我想它应该可以正常工作:
return $qb->select('d.grades')
->where('d.id = :id')
->setParameter('id', $id)
->getQuery()
->getResult();
我是 Symfony 2 的初学者,我遇到 DQL 查询问题:我正在尝试显示一个 属性 数组集合。
这是我的案例:两个 类 与 "ManyToOne" 和 "OneToMany"
连接在一起DishGrade.php :
/**
* @var Dish $dish
*
* @ORM\ManyToOne(targetEntity="Dish", inversedBy="grades",
cascade={"persist", "remove", "merge"})
* @ORM\JoinColumn(name="dish_id", referencedColumnName="id", nullable=false)
*
*/
private $dish;
Dish.php :
/**
* @var \Doctrine\Common\Collections\Collection $grades
*
* @ORM\OneToMany(targetEntity="DishGrade", mappedBy="dish", cascade={"all"},
orphanRemoval=true)
*/
private $grades;
然后这是我的控制器,其中 returns 一组对象 "DishGrade"
/**
* Get grades dish.
*
*
* @ApiDoc(
* output = "Awadac\ApiBundle\Model\Dish",
* statusCodes = {
* 200 = "Returned when successful",
* 404 = "Returned when the dish is not found"
* }
* )
*
* @Get("/dishes/{id}")
*
* @param Request $request the request object
* @param int $id the dish id
*
* @return array
*
* @throws NotFoundHttpException when dish not exist
*/
public function getDishAction(Request $request, $id)
{
$dish = $this->getDishManager()->getRepository()->getGrades($id);
if (!$dish) {
throw $this->createNotFoundException('Dish does not exist.');
}
return $dish;
}
我的查询无效:
DishRepository.php :
public function getGrades($id){
$qb = $this->_em->createQueryBuilder();
return $qb->select('d.grades')
->from('AwadacApiBundle:Dish', 'd')
->where('d.id = :id')
->setParameter('id', $id)
->getQuery()
->getResult();
}
我得到的错误代码:
{"code":500,"message":[语义错误] 第 0 行,'grades FROM AwadacApiBundle:Dish' 附近的第 9 栏:错误:无效的 PathExpression。必须是 StateFieldPathExpression。","errors":null}
当我想从我的对象 "Dish" 中获取所有属性时,它起作用了,所以我只是想知道为什么我不能单独显示这个 ArrayCollection。
感谢您的宝贵时间!
如果您已经在 DishRepository 中,您将能够通过
创建查询生成器$qb = $this->createQueryBuilder('d');
此外只需删除 ->from() 语句,我想它应该可以正常工作:
return $qb->select('d.grades')
->where('d.id = :id')
->setParameter('id', $id)
->getQuery()
->getResult();