madi
madi

Reputation: 5662

Comments having sub-comments in cakePHP

I am creating a forum for my school. A student will be able to create many topics in a particular forum and other students are able to comment on it. The tricky part is that i have a feature where a student can have sub comment to a comment. Lemme tell you my simple table structure which i am using Mysql and developing in cakephp. Below is not the full structure.

User (id,name)
Forums(id,desc,date)
Topics(id,user_id,forum_id,title,content,date)
comments(id,user_id,topics_id,content,date,parent_id) *=> the parent_id referers where the subcomment belongs to.*

I used the cakePHP containable to get all toics and comments of a particular forum in my forum_controller:

$this->find('all',array(
            'contain'=>array(
                'User'=>array(
                    'fields' => array       ('id','displayName','gender','email','profileImgBig')
                 ),'Post'=>array(
                     'User'=>array(
                         'fields' => array('id','displayName','gender','email','profileImgBig')
                     ),
                     'order' => array('Post.created'=>'DESC'),
                 )
            ),
            'conditions'=>array('Topic.forum_id'=>$id),
            'order' => array('Topic.datePosted'=>'DESC')
       ));       

The above retrieves all forum->Topics->User & Topics->Comments->User.

How can i implement in a way that its retrieves all Comments and sub comments? Please help and advice me. Thank you! I am looking at tree behaviour but i am not sure how am i suppose to incorporate with my above find statement.

Upvotes: 0

Views: 432

Answers (1)

M. Meiboom
M. Meiboom

Reputation: 164

You can indeed use the TreeBehaviour in CakePHP for this. You'll need to add two more fields to your database (lft, rght) besides parent_id for this and activate it in the model for comments.

See the CakePHP manual for details, but after activating the behaviour you can use functions like Model::children() and Model::find('threaded') to find all comments that reside below a certain comment (e.g, that are subcomments).

I would usually first query the database for all topics, and then queue the Comment model for comments and subcomments using the Model::children() function. I wonder though, why would you want to load all topics and all comments within those topics, and not just 1 topic with comments?

Upvotes: 2

Related Questions