嗨,我遇到了一个问题,例如基于父表查看子表数据。
表结构
主题
id | name |
--------------
1 | xyz |
发布
id | topic_id | topic_body |
---------------------------------
1 | 1 | abc |
topic_id
是一个foreign_key
我的工作
站点控制器
$topic = Topic::model()->findAll(array('order'=>'id DESC', 'limit' => 5,'condition'=>'approved=:approved', 'params'=>array(':approved'=>1)));
$this->render('index', array('topic'=>$topic));
视图
<?php
foreach($topic as $topic)
{
$topics = $topic->title;
?>
<p>
<a href="view/id/<?php echo $topic->id; ?>">
<b><?php echo $topics;?></b>
</a>
</p>
<?php
}
?>
现在显示主题,但是如何根据子表中的主题显示topic_body?
您已经有一个主题模型,最好也定义一个帖子模型并在模型之间创建关系。
class Post extends CActiveRecord {
...
public function relations() {
return array(
'topic'=>array(self::BELONGS_TO, 'Topic', 'topic_id')
);
}
}
重写主题模型并添加与帖子模型的关系(一个主题有多个帖子)
class Topic extends CActiveRecord {
...
public function relations() {
return array(
'posts'=>array(self::HAS_MANY, 'Post', 'topic_id')
);
}
}
现在获取您的主题并使用->with
将所有帖子包含在结果中:
$topics = Topic::model()->with('posts')->findAll(array('order'=>'id DESC', 'limit' => 5,'condition'=>'approved=:approved', 'params'=>array(':approved'=>1)));
foreach($topics as $topic){
echo $topic->title;
foreach($topic->posts as $post){
echo $post->topic_body;
}
}