我正在使用PHP 5.6开发Symfony 3.4。
这是我的问题的背景:
我有一个“信息”表,其中包含几行。我想对这些行进行排序,并根据称为“区域”的特定列显示它们。所以目标是例如
“第1区” *与该区域相对应的信息行 “第2区” *与该区域相对应的信息行 ...
我在存储库中实现了我的功能,并且还在Twig下进行了布局。一切正常。我要做的就是优化控制器上的代码以使其更加整洁。
因此我的想法是:
但是我不能。这是我的代码
存储库:
public function getInformationsZone($zone)
{
$queryBuilder = $this->createQueryBuilder("i")
->where("i.zone = :zone")
->orderBy("i.updatedAt","DESC")
->orderBy("i.criticite","DESC")
->setParameter('zone',$zone);
return $queryBuilder->getQuery()->getResult();
}
public function getZonesActives()
{
$queryBuilder = $this->createQueryBuilder("i")
->select("i.zone")
->distinct(true);
return $queryBuilder->getQuery()->getResult();
}
控制器
/**
* Lists all information entities.
*
* @Route("/", name="informations_index")
* @Method("GET")
*/
public function indexAction()
{
$em = $this->getDoctrine()->getManager();
$information = $em->getRepository('PagesBundle:Information')->findAll();
$listZones = $this->getDoctrine()->getRepository('PagesBundle:Information')->getZonesActives();
$tabInfos = array();
foreach($listZones as $key=>$value)
{
$zone = $this->getDoctrine()->getRepository('PagesBundle:Information')->getInformationsZone($value);
array_push($tabInfos,$zone);
}
// This is what i did just before
/* $infosZone1 = $this->getDoctrine()->getRepository('PagesBundle:Information')->getInformationsZone("Zone 1");
$infosZone2 = $this->getDoctrine()->getRepository('PagesBundle:Information')->getInformationsZone("Zone 2");
$infosZone3 = $this->getDoctrine()->getRepository('PagesBundle:Information')->getInformationsZone("Zone 3");
$tabInfos = array($infosZone1,$infosZone2,$infosZone3);*/
return $this->render('information/index.html.twig', array(
/* 'information' => $information,
'infosZone1'=> $infosZone1,
'infosZone2'=> $infosZone2,
'infosZone3'=> $infosZone3,*/
'tabInfos'=>$tabInfos,
));
}
我遇到此错误:
执行'SELECT i0_.id AS id_0,i0_.contenu AS contenu_1,i0_.updated_at AS Updated_at_2,i0_.zone AS zone_3,i0_.titre AS titre_4,i0_.criticite AS commentite_5从信息i0_那里i0_ .zone =?使用参数[“ Zone 1”]进行i0_.criticite DESC'的订单:
SQLSTATE [HY093]:参数号无效:参数未定义
答案 0 :(得分:1)
替换:
$zone = $this->getDoctrine()->getRepository('PagesBundle:Information')->getInformationsZone($value);
与此:
$zone = $this
->getDoctrine()
->getRepository('PagesBundle:Information')
->getInformationsZone($value->getZone());
您要将所有区域实体传递给getInformationsZone
方法。
因此,要获取区域的标题,必须调用区域的getter。
$value
至$value->getZone();
编辑:因此,只需将$value->getZone()
更改为$value['zone'];