Activerecord 嵌套注释Yii2

Activerecord 嵌套注释Yii2,activerecord,yii2,Activerecord,Yii2,我有一个评论表,如下所示: +-----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+--------------+------+-----+---------+----------------+ | id | int(11) |

我有一个评论表,如下所示:

+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| id        | int(11)      | NO   | PRI | NULL    | auto_increment |
| user_id   | int(11)      | NO   |     | NULL    |                |
| parent_id | int(11)      | NO   |     | 0       |                |
| post_id   | int(11)      | NO   |     | NULL    |                |
| body      | text         | NO   |     | NULL    |                |
| date      | datetime     | NO   |     | NULL    |                |
| status    | tinyint(1)   | NO   |     | 0       |                |
+-----------+--------------+------+-----+---------+----------------+
defautl的注释parent_id为0,若注释得到答复,则在parent_id列中插入parent id

并使用以下代码与用户表建立关系:

public function getPosts()
{
    return $this->hasMany(Post::className(), ['category_id' => 'id']);
}

如何显示嵌套?

首先,您需要在注释模型类中定义关系:

public function getChildComments()
{
    return $this->hasMany(self::className(), ['parent_id' => 'id']);
}
它定义了实体与自身的关系。我认为将相关的逻辑或处理程序保存在同一个类中的helper/可调用方法中总是好的,这样就不需要从数据库一次加载它们。接下来是什么应该回答这个问题:

如何显示嵌套


案例01:在RESTFul应用程序中 只需在Comment类中重写
字段()
,即可始终输出子注释:

公共函数字段()
{
$fields=parent::fields();
$fields['childs']='childComments';
返回$fields;
}
就这样。应该注意递归表示,在输出注释列表时,您会得到类似的结果:


案例02:HTML web视图内部 实现这一目标的方法可能有很多。我能想到的最简单、最干净的方法是使用Yii已经在使用的模板引擎,以递归方式重新呈现包含子注释的视图。作为一个工作示例,在index.php文件中添加如下内容:


然后创建\u comment.php文件:


每次发现链接到所表示的实例的
childComments
时,模板都将为自己创建一个新实例。使用CSS填充来显示嵌套,该代码应输出以下内容:


层次结构的最大级别是什么,或者假设您使用的是邻接列表模型,为任何顶级注释检索单个路径需要多少个自联接?没有限制,a wirete a comment、b replay到a、c replay到b……,我需要一个递归函数来显示所有注释。我不明白,我写了一个函数来获取Children,比如getChildComments(),它在一级递归函数中起作用,但在递归函数中不起作用,我如何在递归函数中使用它?@Masoud92m现在呢?谢谢。很高兴这有帮助