Доброе время суток.
На сайте планируется сделать Вопросы и Комментарии к ним (по сути, некая аналогия с ЖЖ, только Вопросы вместо Постов). У Вопроса и Комментов есть свои Авторы. Надо вывести Вопрос и Комменты к нему в виде дерева. Соответственно при выводе нужно еще указать Авторов.
Ассоциации моделей:
Код: | class Question extends AppModel {
var $belongsTo = array(
'User' => array('className' => 'User',
'foreignKey' => 'user_id',
'conditions' => '',
'fields' => array('User.id', 'User.nickname')
));
var $hasMany = array(
'Comments' => array('className' => 'Comment',
'foreignKey' => 'question_id',
'dependent' => false)
);
}
class Comment extends AppModel {
var $belongsTo = array(
'User' => array('className' => 'User',
'foreignKey' => 'user_id',
'fields' => 'User.nickname',
));
var $hasMany = array(
'ChildComment' => array('className' => 'Comment',
'foreignKey' => 'parent_id',
'dependent' => false,
));
} |
Я сделал в модели Question метод, который должен возвращать по указанному questionId Вопрос и массив Комментариев к нему:
Код: | $this->contain(array('Comments'=>array('ChildComment', 'conditions'=>array('Comments.parent_id' => null)),'User'));
$res = $this->read(null, $questionId); | Возвращаются данные в следующем формате:
Код: | array
'Question' =>
array (массив полей Вопроса)
'User' =>
array (массив полей Автора Вопроса)
'Comments' =>
array
0 =>
array (массив полей Комментария)
1 =>
array ... | Но мне, во-первых, нужно получить Автора для каждого Комментария, во-вторых, не возвращаются комментарии второго и далее уровней, а в-третьих, я до конца не могу понять, как мне впотом вывести Комментарии именно в виде древовидной структуры - по идее нужна рекурсивная функция, которая при выводе элемента будет его проверять на предмет наличия у него подмассивов и переходить к ним. Но как в ctp-файле организовать ее, пока непонятно. |