如何通过yii中的外键从模型中获取记录

时间:2013-12-10 11:19:56

标签: php yii

我是yii框架的新手。我在yii框架中有三个不同的表。

第一张表

第一个表是language(id,language_name)// id是主键。

第二张表

第二个表是经文(id,topic_id,verse_text)// id是主键,topic_id是外键。

第三表

第三个表是verse_translations(id,verse_id,language_id,translations_text) // id是主键,language_id是带有语言表的外键引用,// verse_id是带有verse表的外键引用。

现在我的问题是。

我希望获得具有特定topic_id的所有verse_text。

那么如何通过外键(即topic_id)从模型 Verse 获取所有记录,这些记录应该由数据提供者函数发送到视图。

此时我正在使用。

我的控制器方法

public function actionVerset()
    {
    $topic_id = 1;  
    $result=Verse::model()->with('topic_verse', $topic_id)->findAll();

    $dataProvider=new CArrayDataProvider($result, array(
      'id'=>'Verse',
      'pagination'=>array(
      'pageSize'=>2,
     ),));

    $this->render('myverse',array('dataProvider'=>$dataProvider));
}

但它没有给出我想要的结果。

我的诗歌模型关系方法

public function relations()
{
     return array(
    'topic' => array(self::BELONGS_TO, 'Topic', 'topic_id'),
    'verseTranslations' => array(self::HAS_MANY, 'VerseTranslations', 'verse_id'),
    'verseLanguage' => array(self::HAS_MANY, 'VerseTranslations', 'language_id'),
    'topic_verse' => array(self::BELONGS_TO, 'Verse', 'topic_id'),
    );
}

任何帮助将不胜感激。

感谢。

2 个答案:

答案 0 :(得分:2)

要获取具有特定topic_id的所有Verse记录,这应该可以解决问题:

$records = Verse::model()->findAllByAttributes(array('topic_id' => $topic_id));

答案 1 :(得分:0)

当您在模型中声明了关系时,您只需使用

就不需要从db中获取数据
 $result=Verse::model()->findAll();

然后当你使用这个

 $result->topic->field_name of topic table

这将得到结果。