2016-04-25 8 views
1

Die folgende ....Laravel Kollektionen - Ergebnisse bestellen

Controller:

public function treatmentsList() 
    { 
     $treatments = Treatment::with('category')->where('status', 1)->orderBy('medical_name')->get(); 
     $groups = $treatments->groupBy('category.name'); 
     return view('pages.treatments.list', compact('groups')); 
    } 

Ausblick:

<ul> 
    @foreach($groups as $category_name => $treatments) 
     <li> 
      <h4>{{ $category_name }}</h4> 
      <ul> 
       @foreach($treatments as $treatment) 
        <li> 
         <h5>{{ $treatment->medical_name }}</h5> 
        </li> 
       @endforeach 
      </ul> 
     </li> 
    @endforeach 
</ul> 

mich gibt ...

Die Behandlungen gruppiert in ihrer Kategorien und in alphabetischer Reihenfolge, aber die Kategorien sind nicht in alphabetischer Reihenfolge.

- Category B 
Treatment A 
Treatment B 
Treatment C 

- Category A 
Treatment A 
Treatment B 

- Category C 
Treatment A 
Treatment B 
Treatment C 
Treatment D 

Wie kann ich die Behandlungen und Kategorien in alphabetischer Reihenfolge erhalten?

+0

Haben Sie nach dem Funktionsaufruf groupBy ein '-> orderBy ('category.name')' versucht? –

+0

Hinzufügen von '-> orderBy ('category.name')' nach der groupBy gibt mir: Methode orderBy ist nicht vorhanden. – TickedTask

Antwort

1

Sie können diese erhalten, indem Abfragebedingungen für die eifrigen Laden Abfrage hinzufügen:

Treatment::with(['category' => function ($query) { 
    $query->orderBy('name'); 
}]) 
->where('status', 1) 
->orderBy('medical_name') 
->get(); 

Hallo,

Ich bin nicht sicher, ob dies ist, was du meinst ... aber es hat nicht funktioniert ... bekomme ich immer noch die Kategorien nicht alphabetisch aufgelistet.

public function treatmentsList() 
{ 
    $treatments = Treatment::with(['category' => function ($query) { 
     $query->orderBy('name'); 
    }]) 
     ->where('status', 1) 
     ->orderBy('medical_name') 
     ->get(); 
    $groups = $treatments->groupBy('category.name'); 
    return view('pages.treatments.listA', compact('groups')); 
} 

Sie haben Recht - mein Fehler. Ich denke, dass diese Antwort die Join-Abfrage ist:

public function treatmentsList() 
{ 
    $treatments = Treatment::with('category') 
     ->select('treatment.*') 
     ->join('category', 'category.id', '=', 'treatment.category_id') 
     ->where('treatment.status', 1) 
     ->orderBy('category.name') 
     ->orderBy('treatment.medical_name') 
     ->get(); 
    $groups = $treatments->groupBy('category.name'); 
    return view('pages.treatments.listA', compact('groups')); 
} 

Überprüfen Sie die Namen der Tabellen und Felder aus obigem Beispiel. Das sollte funktionieren.

+0

Vielen Dank ... Ich habe nur die Tabellennamen angepasst und alles funktioniert. – TickedTask