Как получить данные через несколько таблиц?

Есть таблицы questions, tags, question_tags, answers.

Связаны между собой так:
// App\Models\Question

public function tags()
{
	return $this->belongsToMany('App\Models\Tag', 'question_tags');
}

public function answers()
{
	return $this->hasMany('App\Models\Answer');
}

// App\Models\Answer

public function question()
{
	return $this->belongsTo('App\Models\Question');
}

// App\Models\Tag

public function questions()
{
	return $this->belongsToMany('App\Models\Question', 'question_tags');        
}

Собственно вопрос в том, как получить все ответы на вопросы определенного тега
// App\Models\Tag

public function answers()
{
	return ???        
}
  • Вопрос задан
  • 182 просмотра
Решения вопроса 1
пишите сразу в контроллере или репозитории, где вы там результаты получаете $tag = Tag::with(['questions.answers'])->where('id', $id)->first();
Так получите объект, содержащий коллекцию вопросов с методе questions, точно не скажу, но вроде pluck метод соберет все ответы:
$answers = $tag->questions->pluck('answers');

Если не соберет - организуйте foreach цикл (в крайнем случае) или почитайте подробнее о collection ларавела.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Denormalization
@Denormalization
Тут нужно использовать laravel.com/docs/5.1/eloquent-relationships#has-ma...

// App\Models\Tag

public function answers()
{
    return $this->hasManyThrough('App\Models\Answer', 'App\Models\Question');
}


Думаю так сработает. Нет возможности проверить сейчас.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы