0

我对 cakephp 有点陌生,我想知道为什么我会遇到这种问题。

基本上,我在 cakephp 中做一个线程化的评论。但我的问题是,每次我尝试对“评论”进行“评论”时,它的显示方式都不同。

这是一个屏幕截图: 在此处输入图像描述

我希望它被反转,就像所有子评论都应该发布在最后一行一样。目前,当我添加新评论时,它显示在顶部而不是底部。我希望它变得像 Facebook 的评论方式一样。

这是我的代码:

$comments = $this->UserDiscussionComment->find('threaded', array('conditions' => array('UserDiscussionComment.user_discussion_id' => $slug), 'order' => array('UserDiscussionComment.id DESC', 'UserDiscussionComment.created ASC')));

这是数据库中的示例记录:

在此处输入图像描述

我想更改子评论的顺序。我尝试了“ASC”和“DESC”,但它不起作用。

提前致谢。

4

2 回答 2

2

根据find('threaded')的文档,您将无法以不同的顺序对子项进行排序。我要做的是在您的 find 调用之后,只需反转数组:

$comments = $this->UserDiscussionComment->find('threaded', array(
    'conditions' => array('UserDiscussionComment.user_discussion_id' => $slug),
    'order' => array('UserDiscussionComment.id DESC')
));

for ($i = 0; $i < sizeof($comments); $i++) {
    $comments[$i]['children'] = array_reverse($comments[$i]['children']);
}

未经测试,但它应该可以解决问题(我也假设您只能像屏幕截图所示那样评论 1 级深度)。


编辑

我想分享一种我过去使用的不同方法来完成你想要完成的同一件事。基本上我这样设置我的Comment模型:

class Comment extends AppModel {

    public $belongsTo = array(
        'ParentComment' => array(
            'className' => 'Comment',
            'foreignKey' => 'parent_id'
        ),
        'User'
    );

    public $hasMany = array(
        'ChildComment' => array(
            'className' => 'Comment',
            'foreignKey' => 'parent_id'
        )
    );
}

然后,当我想进行查找时,我可以对父子评论进行不同的排序(请注意,我正在使用该Containable行为):

$comments = $this->Comment->find('all', array(
    'order' => 'Comment.id DESC',
    'contain' => array(
        'ChildComment' => array(
            'order' => 'ChildComment.id ASC'
        )
    )
));
于 2012-08-02T20:43:35.063 回答
0
array('UserDiscussionComment.id DESC', 'UserDiscussionComment.created ASC')

我认为错误就在那里。

由于 UserDiscussionComment.id 都是不同的,所以没有什么可订购的UserDiscussionComment.created ASC

尝试:

array('UserDiscussionComment.parent_id DESC', 'UserDiscussionComment.created ASC')
于 2012-08-02T08:29:37.667 回答