Не уверен, как определить такое отношение в модели, которая принимает входной параметр, но вы можете определить область в вашей модели, чтобы получить ответы, отфильтрованные по группам, например
class Answer extends Model {
public function user()
{
return $this->belongsTo('App\User');
}
public function question()
{
return $this->belongsTo('App\Question');
}
public function scopeGroup($query, $name)
{
return $query->whereHas('question.group', function($q) use($name){
$q->where('name', '=', $name);
});
}
}
Я предполагаю, что в модели ответов вы определили отношения для вопроса, и аналогично в модели вопросов вы определили отношения для групповой модели.
В построителе запросов вы можете написать это как
$answers = Answer::group('group_A')
->whereHas('user', function($q) use($userid){
$q->where('id', '=', $userid);
})->get();
Или вы можете применить фильтр к загруженным отношениям как
$users = User::with(['answers' => function($query)
{
$query->whereHas('question.group', function($q){
$q->where('name', '=', 'group_A');
});
}])->get();
Если у вас уже есть объект пользователя, вы можете получить ответы для конкретной группы как
$answers = $user->answers()
->whereHas('question.group', function($q){
$q->where('name', '=', 'group_A');
})->get();