【发布时间】:2014-05-08 12:15:30
【问题描述】:
使用 Symfony2.3.4 和 Doctrine。
我有一个班级 Student 与班级 Edition 具有 ManyToMany 关系。
现在在我的 StudentController 中,我有这个 IndexAction($edition_id) 来列出数据库中的不是所有学生,而只列出与给定版本 id 相关的学生。
$entities = $em->getRepository('PersonBundle:Student')->findBy(array(
????????
));
我正在考虑与 $edition_id 一起使用的某种标准,但无法提出任何标准。
感谢提示,谢谢。
@dmnptr: 我正在尝试,我对此很陌生,如果我做错了什么,请告诉我。
我把你写的函数放在控制器和我添加的方法 IndexAction($edition) 中
$students = this->findAllByEdition($edition);
现在的问题是参数 $edition 来自这样的树枝模板:
<a href="{{ path('student', { 'edition': entity}) }}"</a>
是持有 Edition 对象的实体。
但是当我这样做时 entity 返回 __toString() 方法,这意味着带有版本名称的字符串,而不是版本本身,这是您给我的函数使用的。
现在,您是否知道一种从模板中获取对象本身的方法,而不是 __toString() 方法,谢谢...
【问题讨论】:
-
您不能将整个对象压缩到 URL 中。您应该在
path()中使用entity.id,然后在您的控制器中使用其ID 获取您需要的实体。此外,findAllByEdition应该进入自定义存储库,而不是控制器。 -
我是这么想的,只是我不知道如果方法不在控制器里怎么调用,你能告诉我吗?而且,这只是为了确定,将它留在控制器中会有什么风险??
-
我不认为在控制器中使用这种方法存在风险。你可以这样做,这是你的选择。然而,这被认为是一种糟糕的风格,因为它会将逻辑上属于存储库的代码添加到控制器中,使其变得不必要地大。以下是有关自定义存储库的更多信息:symfony.com/doc/current/book/…
标签: php symfony doctrine-orm findby