Laravel 5 如何从其他表中获取方法中的数据?
这是我的简单数据库模式。现在在我的分组表中有'groupa'和'groupb'。在问题表中,我有10个问题5个针对A组,5个针对B组。用户表是一个ID=1的用户。我试图做的是获取如下数据: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
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();