我在树枝上显示评论时遇到问题。如果我列出它们,它们是可见的,但我需要它们嵌套。
这是实体,我认为它应该像这样引用:
/**
* @var \AppBundle\Entity\Comment
*
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Comment")
* @ORM\JoinColumn(name="parentId", referencedColumnName="id")
*/
private $parentId;
Controller很简单,从db获取所有注释并返回数组(有,没有parentId) 按照一些指示,我将其添加到主枝文件中:
<!-- Comments and omments with parentId -->
{% include 'front/main/comments-main.html.twig' with {'commments':comments} %}
列出所有评论都有效。但是在包含的枝条中,似乎是代码的和平
{% if comment.parentId != null %}
{% set children = [] %}
{% set children = children|merge([ comment ]) %}
{% include 'front/main/comments-main.html.twig' with {'comments':children} %}
{% endif %}
不起作用。如果我回应某些内容,它会显示在正确的位置,并在该ID下进行评论。但如果没有那条线。页面加载非常慢,永远不会结束。像无限循环。我做错了什么?
答案 0 :(得分:0)
嗯,我做到了。这是无限循环的问题,但因为我正在处理parentId,而且我正在按照一个正在处理object.children的人的指示。因此,我必须与多对一的关系进行自我定向
// ...
/**
* One Category has Many Categories.
* @OneToMany(targetEntity="Category", mappedBy="parent")
*/
private $children;
/**
* Many Categories have One Category.
* @ManyToOne(targetEntity="Category", inversedBy="children")
* @JoinColumn(name="parent_id", referencedColumnName="id")
*/
private $parent;
// ...
public function addChild(Comment $child) {
$this->children[] = $child;
$child->setParentId($this);
}
public function __construct() {
$this->children = new \Doctrine\Common\Collections\ArrayCollection();
}
(来自http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#one-to-many-self-referencing) 并在控制器中进行小的更改以设置children.Before flush()
$parent = $comment->getParentId();
$parent->addChild($comment);
在树枝中,我已经在子模板中,在循环内
<div>
{% if comment.children is defined %}
{% include 'front/main/comments-main.html.twig' with {'comments':comment.children} %}
{% endif %}
</div>
希望能节省一些时间给某人,我浪费了几个小时!