Сразу хотел бы заметить что лучше для каждой новой сущности использовать поле id, а не question_id или answer_id.
Дела в том что таблица question_answers используется только для получения списка id связанной таблицы чтобы достать из нее данные нужна построить запрос немного по другому.
class Question extends ActiveRecord
{
public function getQuestionAnswers()
{
return $this->hasMany(QuestionAnswer::className(), ['question_id' => 'id']);
}
// Этот метод не используется но как пример пускай будет
// public function getAnswers()
// {
// return $this->hasMany(Answer::className(), ['id' => 'answer_id'])
// ->via('questionAnswers'); // Имя связи которая объявлена выше
// }
}
class QuestioAnswer extends ActiveRecord
{
public function getAnswer()
{
return $this->hasOne(Answer::className(), ['id' => 'answer_id']);
}
public function getQuestion()
{
return $this->hasOne(Question::className(), ['id' => 'question_id']);
}
}
class Answer extends ActiveRecord
{
public function getQuestionAnswers()
{
return $this->hasMany(QuestionAnswer::className(), ['answer_id' => 'id']);
}
}
/** @var Question[] $model */
$models = Question::find()
->where([
// ...
])
->with([
// так мы показываем что по мима данных из Question нам ещё понадобятся
// данные из таблиц questioAnswers и Answer
// еще на этапе формирования самого SQL запроса
'questioAnswers',
'questioAnswers.answer',
])
->all();
foreach($models as $model) {
echo $model->name;
foreach($model->questioAnswers as $item) {
echo $item->position;
echo $item->answer->name;
}
}
Ну как-то так ))
А вообще попробуй использовать gii для генерации моделей, если при создании таблиц в mysql добавишь foreign_key, тогда gii сам с генерирует все связи между моделями.