cakephp线程评论

时间:2012-08-02 02:42:24

标签: cakephp

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

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

以下是截图: enter image description here

我想让它被颠倒过来,就像所有的孩子评论应该张贴在最后一行一样。目前,当我添加新评论时,它会显示在顶部而不是底部。我希望它变得像facebook的评论一样。

这是我的代码:

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

以下是数据库中的示例记录:

enter image description here

我想更改子评论的顺序。我试过“ASC”和“DESC”,但它没有用。

提前致谢。

2 个答案:

答案 0 :(得分:2)

根据find('threaded')的文档,您无法以不同的顺序订购孩子。我要做的是在你的查找电话之后,简单地反转数组:

$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'
        )
    );
}

然后,当我想做一个发现时,我可以订购父母&amp;孩子的评论不同(注意我使用Containable行为):

$comments = $this->Comment->find('all', array(
    'order' => 'Comment.id DESC',
    'contain' => array(
        'ChildComment' => array(
            'order' => 'ChildComment.id ASC'
        )
    )
));

答案 1 :(得分:0)

array('UserDiscussionComment.id DESC', 'UserDiscussionComment.created ASC')

我认为错误存在。

由于UserDiscussionComment.id都是截然不同的,因此UserDiscussionComment.created ASC无需订购。

尝试:

array('UserDiscussionComment.parent_id DESC', 'UserDiscussionComment.created ASC')