Множественные отношения Cakephp 2.x

у меня есть некоторые проблемы с cakephp 2.x и взаимосвязью моделей, у меня есть 3 модели: сообщение, пользователь и комментарий. Я хотел бы связать сообщение с его пользователем и комментарий с его пользователем.

В пост модели:

   $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'));

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

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

Теперь моя модель Post

    $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'));

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

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

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

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

Мои параметры разбиения на страницы

    $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);

        ...
    }

Спасибо за помощь, ребята, вы молодцы!


person user3566446    schedule 23.09.2014    source источник
comment
Не могли бы вы предоставить также ваше выражение find()?   -  person marian0    schedule 23.09.2014
comment
Не могли бы вы добавить к массиву параметров разбивки на страницы 'recursive' => 2?   -  person marian0    schedule 23.09.2014
comment
Используете ли вы поведение Containable в своей AppModel?   -  person cjs1978    schedule 23.09.2014
comment
Нет, я не использую, я даже пытаюсь с findById(), я получаю хороший пост с его пользователем и комментариями, но не с комментариями пользователей, я пытаюсь с $this->Post->recusrive = 2;, но безрезультатно... думаю, я глупый   -  person user3566446    schedule 23.09.2014


Ответы (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',
        )
    );
}
person Bob    schedule 23.09.2014
comment
Кроме того, User имеет много Comment, а Comment принадлежит как Post, так и User. - person Martin Bean; 23.09.2014
comment
Возможно, вам следует проверить первичные ключи ведьмы, которые нужны вашим отношениям. book.cakephp.org/2.0/en/models/ Здесь вы можете найти дополнительные параметры для установки в свой массив отношений... Если это не сработает, мы можем поболтать! - person Bob; 23.09.2014
comment
Привет, Боб, я хотел бы поболтать, если ты свободен, спасибо. - person user3566446; 23.09.2014