2014-11-04 3 views
0

таблицы: вопросы (ID, вопрос), ответы (идентификатор, question_id, ответ)получить из связанных таблиц с построитель запросов

Один вопрос имеет много ответов

Как я могу получить данные из одной таблицы (например, вопросы) и все связанные с ним данные из другой таблицы (ответов), используя только конструктор запросов 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

ответ

0

Таблицы: вопросы (идентификаторы, вопрос), ответы (идентификатор, question_id, ответ)

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

Выполнить это, и если она по-прежнему не работает, дайте нам toSql() из SQL запросов SQL.

Вы должны быть более конкретными в отношении того, как вы хотите структурировать данные. Это может потребовать больше манипуляций на PHP, если это более сложно.

+0

Код, который вы указали, возвращает 1 ответ на каждый вопрос. но он должен дать несколько ответов для каждого вопроса. –

+0

Это не проблема с Laravel или построителем запросов, но проблема с тем, как вы структурировали свои данные в MySQL. –

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 

EDIT : Значит, вы не используете красноречивого .. только один вопрос, почему в вашем выборе вы получаете дважды тот же столбец? 'questions.id' и 'answers.question_id' будут одинаковыми. если вы меняете questions.id от answer.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(); 
+0

Он не пользуется Красноречивым. –

Смежные вопросы