Cakephp 2.x несколько отношений

У меня есть некоторые проблемы с cakephp 2.x и отношениями между моделями, у меня есть 3 модели, Post, User и Comment.
Я хотел бы связать сообщение с его пользователем и комментарий с его пользователем.

В почтовой модели:

   $belongsTo = array('Comment','User'),
$hasMany = array('CommentOfPost'=>array('className'=>'Comment'));

У меня есть сообщение, связанное с пользователем, и все комментарии из сообщения, но у меня нет пользователей комментариев.

Редактировать :

Sql выход

   1    SELECT `Post`.`id`, `Post`.`title`, `Post`.`content`, `Post`.`tags`, `Post`.`created`,  `Post`.`modified`, `Post`.`user_id`, `User`.`id`, `User`.`username`, `User`.`password`, `User`.`role`, `User`.`name`, `User`.`lastname`, `User`.`birthdate`, `User`.`email`, `User`.`created`, `User`.`modified` FROM `blog`.`posts` AS `Post` LEFT JOIN `blog`.`users` AS `User` ON (`Post`.`user_id` = `User`.`id`) WHERE `Post`.`id` = 16 LIMIT 1        1   1   0
2    SELECT `CommentOfPost`.`id`, `CommentOfPost`.`post_id`, `CommentOfPost`.`user_id`, `CommentOfPost`.`content`, `CommentOfPost`.`created` FROM `blog`.`comments` AS `CommentOfPost` WHERE `CommentOfPost`.`post_id` = (16)

Редактировать :
Модель комментария

    public $belongsTo = array('User' => array('className' => 'User'));

Почтовая модель

    public $belongsTo = array('Comment' => array('className' => 'Comment'));

Редактировать :

Спасибо за ответ, у меня тот же результат, что и до того, как у меня есть сообщение, его пользователь и сообщение, а также его комментарии, но не пользователи комментариев

Сейчас моя модель пост

    $hasMany = array(
'Comment' => array(
'className' => 'Comment',
)
),
$belongsTo = array(
'User' => array(
'className' => 'User',
)
);

Модель пользователя

   $hasMany = array('Comment' => array('className' => 'Comment'));

Модель комментария

   $belongsTo = array('Users' => array('className' => 'User'), 'Posts' => array('clasName' => 'Post'));

Я использую запросы paginate в моем PostsController

    $this->Paginator->settings = $this->paginate;

$data = $this->Paginator->paginate('Post');
$this->set('posts', $data);

Редактировать :

Мои параметры paginate

    $paginate = array(
'limit' => 10,
'recursive' => 2,
'order' => array(
'Post.id' => 'desc'
)
);

Я пытаюсь с и без рекурсивного варианта

Хорошо, это сделано!

Для резюме у меня есть:

   class User extends AppModel {
public $hasMany = array('Comment' => array('className' => 'Comment'));
}

class Post extends AppModel
{
$hasMany = array(
'Comment' => array(
'className' => 'Comment',
)
),
$belongsTo = array(
'User' => array(
'className' => 'User',
)
);
}

class Comment extends AppModel {
public $belongsTo = array('User' => array('className' => 'User'), 'Post' => array('clasName' => 'Post'));

}

    PostsController extends AppController
{
....

$this->Post->recursive = 2;
$post = $this->Post->findById($id);

...
}

Спасибо за вашу помощь, ребята, вы классные!

1

Решение

Post не принадлежит Comment, У него много comments,

http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html

Пример из поваренной книги:

class User extends AppModel {
public $hasMany = array(
'MyRecipe' => array(
'className' => 'Recipe',
)
);
}

Для вашего приложения:

class Post extends AppModel {
public $hasMany = array(
'Comment' => array(
'className' => 'Comment',
)
);

public $belongsTo = array(
'User' => array(
'className' => 'User',
)
);
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]