Нужна помошь с yii?

Есть 2 таблицы:
CREATE TABLE IF NOT EXISTS `cf_post` (<br>
 `id` int(11) NOT NULL auto_increment,<br>
 `title` varchar(128) NOT NULL,<br>
 `content` text NOT NULL,<br>
 `tags` text,<br>
 `status` int(11) NOT NULL,<br>
 `create_time` int(11) NOT NULL,<br>
 `update_time` int(11) NOT NULL,<br>
 `author_id` int(11) NOT NULL,<br>
 PRIMARY KEY  (`id`)<br>
) ENGINE=MyISAM DEFAULT CHARSET=utf8;<br><br>
CREATE TABLE IF NOT EXISTS `cf_comment` (<br>
 `id` int(11) NOT NULL auto_increment,<br>
 `content` text NOT NULL,<br>
 `status` int(11) NOT NULL,<br>
 `create_time` int(11) NOT NULL,<br>
 `author` varchar(128) NOT NULL,<br>
 `email` varchar(128) NOT NULL,<br>
 `url` varchar(128) NOT NULL,<br>
 `post_id` int(11) NOT NULL,<br>
 PRIMARY KEY  (`id`)<br>
) ENGINE=MyISAM DEFAULT CHARSET=utf8;




И 2 модели связанные между собой.

Модель Post:
public function relations()<br>
 {<br>
  return array(<br>
   'comments' => array(self::HAS_MANY, 'Comment', 'post_id'),<br>
  );<br>
 }




Модель Comments:
public function relations()<br>
 {<br>
  return array(<br>
   'post' => array(self::BELONGS_TO, 'Post', 'post_id'),<br>
  );<br>
 }




Пытаюсь получить список постов и связанные с постом комментарии:
$dataPosts = Post::model()->with('comments')->findAll();<br>
$dataComments = $dataPosts->comments;




Но $dataComments таким образом приходит как NULL.



Если делать запрос
$dataPosts = Post::model()->with('comments')->findByPk(1);
то $dataComments нормально заполняется комментариями.



Если делаю так:
$dataPosts = Post::model()->with('comments')->findAll();<br><br>
foreach($dataPosts as $val)<br>
 {<br>
  echo $val->comments[1]->content;<br>
 }
то получается вытащить комментарии. Вопрос как вытаскивать эти комментарии из переменной $dataComments;
  • Вопрос задан
  • 2825 просмотров
Решения вопроса 1
@hijaq
В первом случае в $dataPosts получается массив моделей постов, следовательно $dataPosts->comments и не должен возвращать что-то, потому что надо сначала получить конкретную модель поста и уже из неё дергать комментарии. Что, собственно, и делается в третьем варианте. Почитайте внимательнее в чем различие возвращаемого результата у findAll() и findByPk()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы