从查询构建器的相关表中获取

时间:2014-11-04 21:19:28

标签: laravel query-builder

表:问题(id,问题),答案(id,question_id,answer)

一个问题有很多答案

如何使用laravel查询构建器从一个表(例如问题)及其他表(答案)中的所有相关数据中获取数据。

DB::table('questions')
                ->rightJoin('answers','questions.id', '=', 'answers.question_id')
                ->groupBy('questions.id')
                ->select('questions.question','answers.answer', 'questions.id', 'answers.question_id')
                ->get();

这是我到目前为止所做的,但它似乎并没有给出我想要数据结构的方式。

enter image description here

2 个答案:

答案 0 :(得分:0)

表:问题(id,问题),答案(id,question_id,answer)

$query = DB::table('questions')
             ->join('answers', 'questions.id', '=', 'answers.question_id')
             ->select('questions.question','answers.answer', 'questions.id', 'answers.question_id')
             ->get();

运行它,如果它仍然不起作用,请给我们toSql()查询构建器的SQL。

您必须更加具体地了解数据结构的方式。如果它更复杂,可能需要在PHP中进行更多操作。

答案 1 :(得分:0)

所以在你的问题类中你必须添加这个

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

如果您想要问题的答案,可以在刀片视图中执行类似的操作

@foreach($questions as $question)
    @foreach($question->answers as $answer)
       <td>{{ $question->question }}</td>
       <td>{{ $answer->answer }}</td>
       <td>{{ $answer->id }}</td>
       <td>{{ $question->id }}</td>
    @endforeach
@endforeach

编辑:所以你没有使用雄辩的...只有一个问题,为什么在你的选择中你得到两倍相同的列? &#39; questions.id&#39;和&#39; answers.question_id&#39;会是一样的。如果你改变questions.id by answers.id

DB::table('questions')
                ->rightJoin('answers','questions.id', '=', 'answers.question_id')
                ->groupBy('questions.id')
                ->select('questions.question','answers.answer', 'answers.id', 'answers.question_id')
                ->get();