查询问题并列出它们的答案选项在Laravel 5.3中不起作用

时间:2017-01-06 10:53:28

标签: laravel-5.3

我正在使用Laravel 5.3中的多项选择测验应用程序。我有三个表:

questions table
id ->pk
question
is_active

answers table
id ->pk
question_id - fk references questions@id
answer

correct_answer table
id ->pk
answer_id ->references answers@id

现在我想从问题表中选择每个问题 从答案表中得到相应的答案。这就是我想要列出结果的方式:

question one
answer 1
answer 2
answer 3
answer 4

question two
answer 1
answer 2
answer 3
answer 4

我试过这个:

 $questions = DB::table("questions")  
                    ->select("question")  
                   ->join("answers","answers.question_id",
                        "=","questions.id")
                        ->where("questions.is_active",1)
                        ->groupBy("questions.question")
                        ->get();

但是这个查询给了我以下结果:

question one
answer 1
question two
answer 1

当每个问题在答案表中有4个选项时,只返回每个问题的第一个选项

id  question_id answer
1   2           answer 1
2   2           answer 2
3   2           answer 3
4   2           answer 4
5   3           answer 1
6   3           answer 2
7   3           answer 3
8   3           answer 4

我也试过这个但得到了相同的结果:

$questions = DB::table('questions')
        ->leftjoin('questions','question_id',
            'answers.question_id','=','questions.id')
        ->select('*')                    
        ->where('questions.is_active','=',1)
        ->groupBy('question')       
        ->get();

问题模型有很多答案模型。我在模型中设置了它。请帮我解决这个问题。我做错了什么?

1 个答案:

答案 0 :(得分:0)

我建议使用 Eloquent ORM 而不是使用查询构建器。

我不确定您是否在模型中设置了正确的关系。

所以,让我们从头开始。

每个问题都有多个答案。因此关系将是一对多

问题模型

class question extends Model
{
    /**
     * Get the answers of a question
     */
    public function answers()
    {
        return $this->hasMany('App\Answer');
    }
}

答案型号(如果您想获得答案的问题,请点击 - 否则忽略)

class Answer extends Model
{
    /**
     * Get the question of an answer
     */
    public function question()
    {
        return $this->belongsTo('App\Question');
    }
}

在控制器操作中

$questions = Question::with('answers')->get();

希望这会有所帮助。