Как получить данные из отношений с объединениями в yii

Я новичок в Yii, поэтому я задаю этот вопрос.

У меня три таблицы.

Первая таблица

Первая таблица – это language(id, language_name)

// id – первичный ключ.

Вторая таблица

Вторая таблица – это verse(id, topic_id, surah_id, verse_text)

// id – первичный ключ,

Третья таблица

Третья таблица – это verse_translations(id, verse_id, language_id, translations_text)

// id – первичный ключ, language_id – ссылки на внешние ключи с языковой таблицей,

// verse_id – ссылки на внешние ключи со стиховой таблицей.

Теперь мой вопрос.

Я хочу получить список языков доступных переводов с конкретным verse_id . ? Для этого я хочу сделать отношения в файле модели стихов, которые вернут доступные мне языки, поэтому как получить результат в представлении.? и какими будут изменения в стихотворной модели, представлении и контролере, если произойдут какие-либо изменения.

Я написал 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(); 

btw Я не читал все ваши сообщения, просто прочитал ваш sql: D

ОБНОВЛЕНИЕ: если вы определяете свои отношения в mysql перед созданием файлов модели, вы получаете отношения, сгенерированные для вас. Это самый простой способ, и вы можете сделать это:

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

дайте мне знать, что

ура

Вы можете легко получить список доступных переведенных языков из языковой таблицы.

Посмотрим сначала.

 'verseTranslations' => array(self::HAS_MANY, 'VerseTranslations', 'verse_id'), 

это отношение займет все строки перевода стихов конкретного идентификатора стиха, если у вас 10 разных переводов на 10 разных языках с verse_id 1, он отобразит все. Теперь вы можете видеть, что в строке verse_translation есть language_id.

Таким образом, мы можем получить все языки с помощью этого language_id.

Теперь мы делаем другое отношение, относящееся к language_id через verseTranslations, и это отношение отобразит все переведенные языки.

 'verse_lang' => array(self::HAS_MANY, 'Language', array('language_id'=>'id'), 'through'=>'verseTranslations'), 

Так как я написал Sql Query, это эквивалентно этим двум отношениям.

 'verseTranslations' => array(self::HAS_MANY, 'VerseTranslations', 'verse_id'), 'verse_lang' => array(self::HAS_MANY, 'Language', array('language_id'=>'id'), 'through'=>'verseTranslations'), 

В представлении мы можем легко получить к нему доступ через var_dump($data->verse_lang)

Вот и все.

для понимания отношений. Вы можете внимательно прочитать эту ссылку.

http://www.yiiframework.com/doc/guide/1.1/en/database.arr#relational-query-with-through

Надеюсь, это поможет.

Если вам нужна помощь, оставьте сообщение в поле комментариев.

Благодарю.