Комментарии, имеющие подкомментарии в cakePHP - PullRequest
0 голосов
/ 27 августа 2011

Я создаю форум для моей школы.Студент сможет создавать множество тем на определенном форуме, а другие студенты смогут комментировать его.Сложность в том, что у меня есть особенность, где у студента может быть дополнительный комментарий к комментарию.Позвольте мне рассказать вам мою простую структуру таблиц, которую я использую Mysql и разрабатываю в cakephp.Ниже приведена не полная структура.

Пользователь (идентификатор, имя)Форумы (идентификатор, по убыванию, дата)Темы (идентификатор, user_id, forum_id, название, содержание, дата)комментарии (id, user_id, themes_id, content, date, parent_id) * => рефереры parent_id, к которым относится подкоммент. *

Я использовал содержимое cakePHP, чтобы получать все комментарии и комментарии конкретного форума в моем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')
       ));       

Вышесказанное извлекает все форум-> Темы-> Пользователь и темы-> Комментарии-> Пользователь.

Как я могу реализовать таким образом, чтобы он извлекал все Комментарии исуб комментарии?Пожалуйста, помогите и посоветуйте мне.Спасибо!Я смотрю на поведение дерева, но я не уверен, каким образом я должен объединиться с моим приведенным выше утверждением find.

1 Ответ

2 голосов
/ 08 сентября 2011

Вы действительно можете использовать TreeBehaviour в CakePHP для этого. Для этого вам нужно добавить еще два поля в вашу базу данных (lft, rght) помимо parent_id и активировать его в модели для комментариев.

Подробности смотрите в руководстве CakePHP, но после активации поведения вы можете использовать такие функции, как Model :: children () и Model :: find ('threadaded), чтобы найти все комментарии, которые находятся ниже определенного комментария (например являются субкомментариями).

Обычно я сначала запрашиваю базу данных по всем темам, а затем ставлю в очередь модель Comment для комментариев и подкомментариев, используя функцию Model :: children (). Интересно, почему вы хотите загружать все темы и все комментарии в этих темах, а не только одну тему с комментариями?

...