Laravel 5 如何从其他表中获取方法中的数据?

Laravel 5 如何从其他表中获取方法中的数据?,laravel-5,eloquent,Laravel 5,Eloquent,这是我的简单数据库模式。现在在我的分组表中有'groupa'和'groupb'。在问题表中,我有10个问题5个针对A组,5个针对B组。用户表是一个ID=1的用户。我试图做的是获取如下数据: SELECT answer FROM answers JOIN questions q ON (q.id = answer.question_id) JOIN group g ON (g.id = q.group_id) WHERE user_id = 1 AND g = 'group_A' 我在users

这是我的简单数据库模式。现在在我的分组表中有'groupa'和'groupb'。在问题表中,我有10个问题5个针对A组,5个针对B组。用户表是一个ID=1的用户。我试图做的是获取如下数据:

SELECT answer
FROM answers
JOIN questions q ON (q.id = answer.question_id)
JOIN group g ON (g.id = q.group_id)
WHERE user_id = 1 AND g = 'group_A'
我在users类中有一个模型,我想创建一个方法从组中获取答案:

public function getAnswers($group) {
        return $this->hasMany('App\Answers', 'question_id', 'id');
    }

我怎样才能用那种方法得到这个呢?我应该在问题类中创建方法组吗?

不确定如何在采用输入参数的模型中定义此类关系,但您可以在模型中定义一个范围,以获得按组过滤的答案,如

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();