【问题标题】:Relate Comments with themselves将评论与自己相关联
【发布时间】:2015-02-01 15:11:09
【问题描述】:

我是 cakePHP 和整个 MVC 架构的新手。

我想建立一个类似 Reddit 的评论系统,其中一条评论 hasMany 评论和一条评论 belongsTo(仅)一条评论。

这是通常的评论部分,其中一条评论可以对该评论进行回复,并且回复可以有自己的回复等:

Nice article!
|
-- I didn't like it!
   |
   -- Well, you should have!
   |
   -- Yeah me neither!

现在我只设置了这样的“hasMany”关系:

class Comment extends AppModel {
    public $hasMany = array(
        'Comment' => array(
            'className' => 'Comment',
            'foreignKey' => 'comment_id',
            'dependent' => FALSE
        )
    );
}

comment_id 将包含父评论的 id(如果评论没有父评论,则为 NULL)。

当我要求 cakePHP 将属于特定帖子的所有 cmets 返回给我时,它返回给我这个(我手动添加了 cmets):

 Array
(
    [0] => Array
        (
            [Comment] => Array
                (
                    [id] => 2
                    [post_id] => 4
                    [comment_id] => 4
                    [body] => Child of 4
                    [created] => 2015-01-31 18:01:27
                    [modified] => 2015-01-31 18:01:27
                    [0] => Array
                        (
                            [id] => 3
                            [post_id] => 4
                            [comment_id] => 2
                            [body] => Child of 2
                            [created] => 2015-01-01 00:00:00
                            [modified] => 2015-01-16 00:00:00
                        )

                    [1] => Array
                        (
                            [id] => 5
                            [post_id] => 4
                            [comment_id] => 2
                            [body] => 2nd child of 2
                            [created] => 2015-01-14 00:00:00
                            [modified] => 2015-01-28 00:00:00
                        )

                )

        )

    [1] => Array
        (
            [Comment] => Array
                (
                    [id] => 3
                    [post_id] => 4
                    [comment_id] => 2
                    [body] => Child of 2
                    [created] => 2015-01-01 00:00:00
                    [modified] => 2015-01-16 00:00:00
                )

        )

    [2] => Array
        (
            [Comment] => Array
                (
                    [id] => 4
                    [post_id] => 4
                    [comment_id] => 
                    [body] => This is the parent of all
                    [created] => 2015-01-21 00:00:00
                    [modified] => 2015-01-30 00:00:00
                    [0] => Array
                        (
                            [id] => 2
                            [post_id] => 4
                            [comment_id] => 4
                            [body] => Child of 4
                            [created] => 2015-01-31 18:01:27
                            [modified] => 2015-01-31 18:01:27
                        )

                )

        )

    [3] => Array
        (
            [Comment] => Array
                (
                    [id] => 5
                    [post_id] => 4
                    [comment_id] => 2
                    [body] => 2nd child of 2
                    [created] => 2015-01-14 00:00:00
                    [modified] => 2015-01-28 00:00:00
                )

        )

)

据我了解,它会获取所有 cmets,然后为每个 cmets 重新搜索数据库以查找具有“孩子”的那些。

让 cakePHP 返回一个“就绪”的 cmets 数组的正确方法是什么:

Array
(
    [0] => Array
        (
            [Comment] => Array
                (
                    [id] => 4
                    [post_id] => 4
                    [comment_id] => 
                    [body] => This is the parent of all
                    [created] => 2015-01-21 00:00:00
                    [modified] => 2015-01-30 00:00:00
                    [0] => Array
                        (
                            [id] => 2
                            [post_id] => 4
                            [comment_id] => 4
                            [body] => Child of 4
                            [created] => 2015-01-31 18:01:27
                            [modified] => 2015-01-31 18:01:27
                            [0] => Array
                            (
                                [id] => 5
                                [post_id] => 4
                                [comment_id] => 2
                                [body] => 2nd child of 2
                                [created] => 2015-01-14 00:00:00
                                [modified] => 2015-01-28 00:00:00
                            )
                            [1] => Array
                            (
                                [id] => 5
                                [post_id] => 4
                                [comment_id] => 2
                                [body] => 2nd child of 2
                                [created] => 2015-01-14 00:00:00
                                [modified] => 2015-01-28 00:00:00
                            )

                        )
                )
        )
)

【问题讨论】:

    标签: mysql cakephp has-many belongs-to


    【解决方案1】:

    您可能想使用 find('threaded')。您还可以查看树的行为。

    【讨论】:

    • 谢谢。我是否只需要保留hasMany 还是应该添加belongsTo 以使find('threaded') 按预期工作?
    • 谢谢,它成功了。对于任何有同样问题的人,您的模型中不需要任何关系,只需将表中的相应列重命名为 parent_id
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 2017-11-19
    相关资源
    最近更新 更多