2017-10-11 58 views
0

我試圖使用laravel5.1 join()方法,但我得到這個錯誤:加盟laravel三個表和排序依據得到一個錯誤

QueryException in Connection.php line 666: SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous (SQL: select * from quizzes inner join question_numbers on question_numbers . quiz_id = quizzes . id and question_numbers . question_id = multiple_choice . id inner join multiple_choice on multiple_choice . id = question_numbers . question_id where id = 1)

我這裏有三個表,我想加入這三張表。我想首先是要得到一個測驗where ID =到一個特定的ID,然後加入表question_numbers其中question_numbers.quiz_id=quiz.id再加入表multiple_choicewheremultiple_choice.id=question_numbers.question_idwherequestion_numbers.question_type=multiple_choice

我有什麼:

$quiz = DB::table('quizzes')->where('id', $id) 
       ->join('question_numbers', function($join){ 
        $join->on('question_numbers.quiz_id', '=', 'quizzes.id') 
         ->on('question_numbers.question_id', '=', 'multiple_choice.id'); 
       }) 
       ->join('multiple_choice', 'multiple_choice.id', '=', 'question_numbers.question_id') 
       ->get(); 

     dd($quiz); 

回答

1

首先,您需要設置一個表alias這樣quizzes as t爲你的表屬於WHERE條件的id(我假設你的意思這裏測驗表ID列),然後如果你在where裏面引用它,如where('t.id', $id),它不會抱怨模棱兩可的完整性,因爲其他表也有id列,這就是爲什麼它向你顯示下面的查詢異常,

Column 'id' in where clause is ambiguous

嘗試這樣,

$quiz = DB::table('quizzes as t')->where('t.id', $id) 
       ->join('question_numbers', function($join){ 
        $join->on('question_numbers.quiz_id', '=', 't.id'); 
       }) 
       ->join('multiple_choice', 'multiple_choice.id', '=', 'question_numbers.question_id') 
       ->get(); 

     dd($quiz); 
+0

現在,我得到這個錯誤** QueryException在Connection.php行666:SQLSTATE [42S22]:列未找到:1054未知列「測驗。 id'in'on clause'(SQL:select * from'quizzes' as'q' inner join'question_numbers' on'question_numbers'.'quiz_id' ='quizzes'.'id' and'question_numbers'.'question_id' = 'multiple_choice'.'id' inner join'multiple_choice' on'multiple_choice'.'id' ='question_numbers'.'question_id' where'q'.'id' = 1)** – Jonjie

+0

檢查我的編輯。我修正了'$ join-> on('question_numbers.quiz_id','=','t.id')'讓我知道它正在工作或沒有? –

+0

現在,我收到了另一個不同的錯誤:** QueryException在Connection.php行666:SQLSTATE [42S22]:未找到列:1054'on子句'中的未知列'multiple_choice.id'(SQL:select * from 'quizzes' as'q'內連接'question_numbers'在'question_numbers'.'quiz_id' ='q'.''''和'question_numbers'.'question_id' ='multiple_choice'.'id'內連接'multiple_choice' on 'multiple_choice'.'id' ='question_numbers'.'question_id' where'q'.'id' = 1)** – Jonjie