嵌套为循环打印所有对象而不是相关对象



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
    ]);
}

这可能会帮助您更多

相关内容

  • 没有找到相关文章

最新更新