hasOne подтип на CakePHP - PullRequest
       33

hasOne подтип на CakePHP

1 голос
/ 25 марта 2012

В моей БД есть 3 таблицы пользователей:

  • Users
  • users_twitter
  • users_web

Users является родителем users_twitter и users_web.

А затем еще одна таблица для комментариев.Оба типа пользователей могут комментировать.

Итак, когда я хочу показать комментарии, мне нужно получить информацию об авторе каждого комментария.Для этого я использую переменную $belongsTo на /Model/Comment.php следующим образом:

public $belongsTo = array(
    'users' => array(
        'foreignKey' => 'idUser'
    )
);

В Controller / CommentController, когда я делаю это:

public function index($idPost) {
    $this->Comment->recursive = 0;
    return $this->Comment->find('all');
}

Iполучить массив такого типа:

[0] => Array
        (
            [Comment] => Array
                (
                    [id] => 1
                    [idPost] => 441
                    [idUser] => 387371023
                    [comment] => hello word
                    [created] => 2012-03-01 00:00:00
                )

            [User] => Array
                (
                    [id] => 1
                    [username] => myname
                )
        )

И что мне нужно, так это получить дополнительную информацию, один из подтипов пользователей, в зависимости от наличия идентификатора в таблицах подтипов.

Если бы это был идентификатор таблицы user_web, я бы хотел получить это:

[0] => Array
        (
            [Comment] => Array
                (
                    [id] => 1
                    [idPost] => 441
                    [idUser] => 387371023
                    [comment] => hello word
                    [created] => 2012-03-01 00:00:00
                )

            [User] => Array
                (
                    [id] => 1
                    [username] => myname
                    [users_web] =>  Array
                        (
                            [id] => 1
                            [username] => myName
                            [password] => XXXXX
                            [verified] => 1
                            [created] => 1
                        )
        )

Знаете ли вы, возможно ли это с CakePHP?Насколько я знаю, с $hasOne я получаю только один уровень больше, мне нужно два.

1 Ответ

0 голосов
/ 25 марта 2012

В вашей AppModel добавьте

public $actsAs = array('Containable');

В свой индекс:

public function index($idPost) {
    return $this->Comment->find('all', array(
        'contain' => array('User.UsersWeb')));
}

Ваша модель User должна быть связана с моделью UsersWeb, чтобы эта работа работала.

См. http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html#containing-deeper-associations для полного описания.

Кроме того, почему вы возвращаете данные в индексе контроллера?Вы используете requestAction для этого?И почему вы не используете нумерацию страниц?Вы действительно хотите отображать сотни комментариев на одной странице?

См. http://book.cakephp.org/2.0/en/core-libraries/components/pagination.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...