我是symfony的新手,所以请原谅任何简单的错误。
我已经通过控制台为我的壁虎生成了一个CRUD。一切正常,一切都很好。但是,我想要做的是使用URL中的名称,而不是ID,并使查询按预期工作。例如:
目前我有http://breedr.dev/app_dev.php/gecko/1/show,但我希望它是http://breedr.dev/app_dev.php/gecko/Zilly/show -我希望这是有意义的。
这是我Gecko控制器中的Gecko:
public function showAction($name)
{
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('BreedrGeckoBundle:Gecko')->find($name);
if (!$entity) {
throw $this->createNotFoundException('Unable to find Gecko entity.');
}
$deleteForm = $this->createDeleteForm($name);
return array(
'entity' => $entity,
'delete_form' => $deleteForm->createView(),
);
}但我的问题是“找不到壁虎实体”。在查看日志之后,我可以看到正在发生这样的事情:
DEBUG - SELECT t0.id AS id1, t0.name AS name2, t0.aquisition_date AS aquisition_date3, t0.morph AS morph4, t0.sex AS sex5, t0.genetics AS genetics6, t0.bio AS bio7, t0.bred AS bred8, t0.hatchling AS hatchling9, t0.clutch AS clutch10, t0.image_name AS image_name11, t0.updatedAt AS updatedAt12 FROM Gecko t0 WHERE t0.id = ?显然,在这里,您可以看到WHERE在使用id字段,而它应该是name。我需要做什么?
发布于 2015-04-29 22:51:47
$entity = $em->getRepository('BreedrGeckoBundle:Gecko')->find($name);更改为
$entity = $em->getRepository('BreedrGeckoBundle:Gecko')->findOneByName($name);关于你关于医生的问题:
我不能很快找到医生推荐人,但我认为这只是理解理论“魔术”方法的问题。
如果您将查看源代码https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/EntityRepository.php,因此您将看到“查找”方法使用"id“作为预期的param,但如果您需要获得另一个条件,则应该使用”魔术“原则作为findBy%Field% (用于乘记录)或findOneBy%Field% (用于单个记录)。
Update2:但是如果你需要用乘法值搜索,那么你应该按照findBy(‘age’=> 20,‘姓氏’=>‘Miller’)或findOneBy(‘年龄’=> 20,‘=>’Miller‘)进行搜索。
https://stackoverflow.com/questions/29955918
复制相似问题