im当前使用Symfony 4和Doctrine在论坛上工作。
我有问题理解下一步要做什么,需要一些输入才能找出需要采取哪种方式来获得所需的结果。
我的知识是有限的,我一直在为Symfony 4>学说参加KNPU课程,诚然,我已经浏览了一些关系教程教程的部分,但是"提取关系"的情况与我自己不同,教程只能获取1{slug}定义的对象,这将对我稍后有所帮助。
我的意图
我正在尝试将所有类别的实体拉动,并将名称循环为HTML标头,然后在该循环中需要运行另一个循环以列出与该类别关联的主题。作为参考core.html.twig
,保存我的循环的模板(包含在我的基本模板中,以便可以被覆盖(
<div>
<div id="forum head">
<div id="category">
{% for category in categories %}
<h4>{{ category.name }}</h4>
{% for topic in topics %}
<h6>{{ topic.name }}</h6>
{% endfor %}
{% endfor %}
</div>
</div>
</div>
我的问题
我如何在控制器中构建主题数组,无论关联如何,我总是会收到所有主题。
假设,因为我要求所有类别对象,所以我参考类别以完善主题的传递所有类别ID,从而返回所有主题。
整个控制器都不在这里,但我包含了函数片段
/**
* @Route("/forum", name="page_forum")
*/
public function index(CategoryRepository $repository, TopicRepository $topicRepository)
{
$category = $repository->findBy([],['placement' => 'ASC']);
$topic = $topicRepository->findBy(['category' => $category],['placement' => 'ASC']);
return $this->render('forum/index.html.twig', [
'categories' => $category,
'topics' => $topic
]);
}
在我的参考器中,我看到执行SQL以获取我的主题
SELECT t0.id AS id_1,
t0.name AS name_2,
t0.placement AS placement_3,
t0.created_at AS created_at_4,
t0.updated_at AS updated_at_5,
t0.category_id AS category_id_6
FROM topic t0
WHERE t0.category_id IN (?) ORDER BY t0.placement ASC
Parameters:
[▼
[▼
41
42
43
44
45
]
]
这证明了该主题使用所有类别ID。
直到黄铜大头钉,我如何使"主题"循环仅针对其嵌套的类别提取正确的主题?自定义查询(如果是这样,我的尝试失败了(,一个树枝扩展过滤器?或我没有想到的任何方法?
关于越过此障碍的任何建议将不胜感激如果我错过了任何东西,请告诉我
编辑:
我的实体Category
&amp;Topic
的相关性如下(看到了一个类似的问题,包括这些问题,并意识到其无能为力(
类别
/**
* @ORMOneToMany(targetEntity="AppEntityTopic", mappedBy="category")
*/
private $topics;
主题
/**
* @ORMManyToOne(targetEntity="AppEntityCategory", inversedBy="topics")
* @ORMJoinColumn(nullable=false)
*/
private $category;
假设您已经添加了getters和setters,则应该能够在twig模板中使用它们:
<div id="forum head">
<div id="category">
{% for category in categories %}
<h4>{{ category.name }}</h4>
{% for topic in category.getTopics() %}
<h6>{{ topic.name }}</h6>
{% endfor %}
{% endfor %}
</div>
</div>
另外,您实际上不需要在控制器中返回主题对象:
/**
* @Route("/forum", name="page_forum")
*/
public function index(CategoryRepository $repository, TopicRepository $topicRepository)
{
$category = $repository->findBy([],['placement' => 'ASC']);
//$topic = $topicRepository->findBy(['category' => $category],['placement' => 'ASC']);
return $this->render('forum/index.html.twig', [
'categories' => $category,
//'topics' => $topic
]);
}
这可能会帮助您更多