php – 如何从yii中的连接关系中获取数据

我是Yii的初学者,所以我问这个问题.

我有三张不同的桌子.

第一张表

第一个表是语言(id,language_name)

// id是主键.

第二张表

第二个表是经文(id,topic_id,surah_id,verse_text)

// id是主键,

第三张表

第三个表是verse_translations(id,verse_id,language_id,translations_text)

// id是主键,language_id是带语言表的外键引用,

// verse_id是带有verse表的外键引用.

现在我的问题是.

我想获得具有特定verse_id的可用翻译语言列表. ?为此,我想在我的视图中返回可用语言的verse模型文件中建立关系,那么如何在视图中获得结果.如果发生任何变化,那么对于模型,视图和控制器会有什么变化.

我编写了MySQL查询,如下所示.

SELECT language.language_name from language 
Inner Join verse_translations ON  verse_translations.language_id = language.id
Where verse_translations.verse_id = 1

但我在Yii中需要这个.

我通过gii代码生成器生成了诗歌模型.

我的诗歌模型关系功能.

public function relations()
{
 return array(
    'sorah' => array(self::BELONGS_TO, 'Sorah', 'sorah_id'),
    'topic' => array(self::BELONGS_TO, 'Topic', 'topic_id'),
    'verseFeedbacks' => array(self::HAS_MANY, 'VerseFeedback', 'verse_id'),
    'verseImages' => array(self::HAS_MANY, 'VerseImages', 'verse_id'),
    'verseLinks' => array(self::HAS_MANY, 'VerseLinks', 'verse_id'),
    'verseTafseers' => array(self::HAS_MANY, 'VerseTafseer', 'verse_id'),
    'verseTranslations' => array(self::HAS_MANY, 'VerseTranslations', 'verse_id'),
    'language_name' => array(self::HAS_MANY, 'Language', 'id'),
 );
}

最佳答案 我给你写了你的sql代码,

$result = Yii::app()->db->createCommand()
->select('l.language_name')
->from('language l')
->join('verse_translations vt' , 'l.id = vt.language_id ')
->join('verse v' , 'vt.id = v.id')
->where('v.id = :var' , array(':var'=>1))
->queryAll();

顺便说一句我没看完你的所有帖子,只读你的sql:D

更新:如果在生成模型文件之前在mysql中定义关系,则会获得为您生成的关系.这是最简单的方法,然后您可以这样做:

$vers = Ver::model()->findByPk(1);
$allLangs = $vers->language_name; // this will give you an array of Language Model back

让我知道做了什么

干杯

点赞