2015-05-05 23 views
5

próbuję wykonać następujące kompleks zalogowany, aby uzyskać wszystkie podmioty, które rozpoczęły się w podzialeComplex przyłączyć laravel

$studentID = Student::find($id); 

$divisionID = Student::where('id', $studentID->id)->select('division_id')->pluck('division_id'); 
$payments = Payment::all(); 
$discounts = Discount::all(); 

// This the Big join to get all subjects that started according to the student's division 
    $subjectStart = SubjectStart::join('teacher_subject' ,'teacher_subject.id' ,'=','subject_start.teach_sub_id') 
           ->join('subject' ,'subject.id' ,'=' , 'teacher_subject.subject_id') 
           ->join('subject_division','subject_division.subject_id' ,'=' ,'subject.id') 
           ->join('division' ,'division.id','=','subject_division.division_id') 
           ->where('division.id' ,$divisionID) 
           ->where('lecture_num' ,'>' , 0) 
           ->get(); 

studenta Potem starałem się pętli ponad $ subjectStart jak następującej

@foreach($subjectStart as $st) 
    {{$st->id}} 
    {{$st->start_date}} 
    {{$st->lecture_num}} 
    ............. 
@endforeach 

Wynik sprzężenia wyświetla się poprawnie z wyjątkiem $ st-> id, wyświetla jako podział identyfikator nie subject_start_id, na przykład jeśli dzielenie _id = 5, wynik pętli nad $ subjectStart, $ st-> id będzie wynosił 5,5, 5, .....

Wszelkie sugestie?

Odpowiedz

3

Rozwiązałem to wystarczy użyć select a następnego

// This the Big join to get all subjects that started according to the student's division 
    $subjectStart = SubjectStart::join('teacher_subject' ,'teacher_subject.id' ,'=','subject_start.teach_sub_id') 
          ->join('subject' ,'subject.id' ,'=' , 'teacher_subject.subject_id') 
          ->join('subject_division','subject_division.subject_id' ,'=' ,'subject.id') 
          ->join('division' ,'division.id','=','subject_division.division_id') 
          ->where('division.id' ,$divisionID) 
          ->where('lecture_num' ,'>' , 0) 
          ->select('subject_start.id', 'subject_start.teach_sub_id', 'subject_start.group_id','subject_start.lecture_num','subject_start.start_date') 
          ->get(); 
2

Po prostu trzeba zastąpić swój powyższy kod z tego jeden:

$subjectStart = SubjectStart::selectRaw('subject.start_id AS id, *') 
          ->join('teacher_subject' ,'teacher_subject.id' ,'=','subject_start.teach_sub_id') 
          ->join('subject' ,'subject.id' ,'=' , 'teacher_subject.subject_id') 
          ->join('subject_division','subject_division.subject_id' ,'=' ,'subject.id') 
          ->join('division' ,'division.id','=','subject_division.division_id') 
          ->where('division.id' ,$divisionID) 
          ->where('lecture_num' ,'>' , 0) 
          ->get(); 
+1

Po pierwsze, proszę mi powiedzieć, który ("subject.start _id AS id), który poleciłeś. Po drugie, odpowiedź wyświetla ten błąd: SQLSTATE [42000]: Błąd składniowy lub naruszenie dostępu: 1064 Wystąpił błąd w składni SQL. W każdym razie, dzięki za komentarz –

+0

które pole, w którym tabeli chcesz wyświetlić jako id? identyfikator pola w table subject_start lub który? może dlatego, że w tabeli tematu nie ma pola start_id. Przepraszam za to nieporozumienie;) –

+1

Nie ważne i dziękuję za podzielenie się ze mną –