我目前正在使用Symfony 4和Doctrine开发论坛。
我在理解下一步要解决的问题时需要一些投入,以找出我需要采取何种方式才能取得理想的结果。
我的知识有限,我一直在学习Symfony 4的KNPU课程>教义,诚然,我略过了Relations教程的一些部分,但“获取关系”的情况与我自己的情况不同,该教程仅获取1 {slug}定义的对象,以后会为我提供帮助。
我的意图
我试图提取所有我的Category实体,并将名称循环为html Header,然后在该循环内要运行另一个循环以列出与该类别关联的主题。
供参考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的主题,因此返回所有主题。
整个Controller不在这里,但我已经包含了功能片段
/**
* @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
和Topic
的相关性如下(看到了类似的问题,其中包括这些问题,并且意识到了它的无能)
类别
/**
* @ORM\OneToMany(targetEntity="App\Entity\Topic", mappedBy="category")
*/
private $topics;
主题
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Category", inversedBy="topics")
* @ORM\JoinColumn(nullable=false)
*/
private $category;
答案 0 :(得分:0)
假设您已经将吸气剂和吸气剂添加到实体中,则应该可以在树枝模板中使用它们:
<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>
此外,您实际上并不需要在控制器中返回Topic对象:
/**
* @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
]);
}
this可能会为您提供更多帮助