在 Yii 中访问和显示子表数据


Access & show child table data in Yii

嗨,我遇到了一个问题,例如基于父表查看子表数据。

表结构

主题

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;
    }
}