Es gibt eine Tabelle namens Anforderungen mit einer Spalte mit dem Namen Status und ich habe Zugriff auf diese Tabelle über eine HasManyThrough Beziehung.Graf Zeilen von jedem Status - Laravel eloquent
Die Tabelle sieht wie folgt aus:
id | status | request
--------------------------
1 | 1 | lorem ipsum
2 | 2 | lorem ipsum
3 | 1 | lorem ipsum
4 | 3 | lorem ipsum
5 | 1 | lorem ipsum
Ich brauche alle verschiedenen Statuszeilen auf effiziente Art und Weise zu zählen, ist das Ergebnis ich suche so etwas wie dieses:
status | status_count
---------------------
1 | 3
2 | 1
3 | 1
Auch Ich muss in der Lage sein, etwas in der Art zu tun:
$status[1] Or $status->id[1] // which prints out the count of that status
Ich kenne diese zwei Optionen, die beide von ihnen re ugly:
1. Die Verwendung von Filtern:
// Through a table named group which contains year column
$requests = Auth::user()->requests()->where('year', 2016)->get();
$status[1] = $requests->filter(
function($request){
return $request->status == 1;
})->count();
Jetzt habe ich 10 Status-ID, und ich möchte diesen Code 10-mal wiederholen, was ist, wenn ich hatte 100 Status ... so ist es nicht ein gute Wahl.
2. ein Recht SQL erstellen Versuch:
ich weiß die richtige SQL-Anweisung, dies zu tun wie folgt aussieht:
SELECT 'status', COUNT(*) FROM requests GROUP BY status
Für diese Aussage zu schaffen ich das tue:
$groups = Group::where(['owner_id' => Auth::user()->id, 'year' => 2016])
->lists('id');
$requests = DB::table('requests')
->select(DB::raw('count(status) as status_count, status'))
->whereIn('group_id', $groups)
->groupBy('status')
->get();
Und hier ist mein dd Ausgabe:
array:2 [▼
0 => {
+"status_count": "3"
+"status": "1"
}
1 => {
+"status_count": "1"
+"status": "2"
}
2 => {
+"status_count": "1"
+"status": "3"
}
]
Welche habe ich keine Ahnung, wie kann ich sie verwenden, zum Beispiel wie kann ich wissen, was der Status 2 zählt? Ich kann eine foreach verwenden, um ein Array mit Status als Schlüssel und status_counts als Wert zu erstellen, aber ich suche einen richtigen Weg, dies zu tun.
Eine andere Sache ist, wie kann ich diese SQL-Anweisung durch eloquent und nicht DB erstellen?
Gibt es eine andere Möglichkeit, die ich vermisse?
Ich denke, Sie können es durch Mischen der Funktionen der Sammlung machen. –