2012-03-25 4 views
1

У меня есть 3 таблицы пользователей на моей БД:hasOne подтип на CakePHP

  • Users
  • users_twitter
  • users_web

Пользователи является родителем как users_twitter и users_web.

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

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

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

контроллер/CommentController, когда я это сделать:

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

Я получаю этот вид массива:

[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 Я получаю только один уровень, мне нужно два.

ответ

0

В вашем AppModel добавить

public $actsAs = array('Containable'); 

В индексе:

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

Ваша модель пользователя должна быть связана с моделью 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

+0

Спасибо, сработало !! О том, почему я возвращаю его, это было просто для примера. Обычно я использую $ this-> set;) – Alvaro

Смежные вопросы