Laravel query builder Objekt gibt oder array?
Baue ich eine sehr einfache web app mit Laravel.
Habe ich gebaut, zwei getrennte Steuerungen, die jede Rückkehr zwei verschiedene Ansichten, wie folgt:
ProfileController:
class ProfileController extends BaseController {
public function user($name)
{
$user = User::where('name', '=', $name);
if ($user->count())
{
$user = $user->first();
$workout = DB::table('workouts')->where('user_id', '=', $user->id)->get();
Return View::make('profile')
->with('user', $user)
->with('workout', $workout);
}
return App::abort(404);
}
}
WorkoutController:
class WorkoutController extends BaseController {
public function workout($name)
{
$workout = DB::table('workouts')->where('name', '=', $name)->first();
if ($workout)
{
Return View::make('add-exercise')
->with('workout', $workout);
}
return App::abort(404);
}
}
Was irritiert mich, was ich tun musste, um einen einzigen workout
Objekt zu jeder Ansicht. Wie Sie vielleicht bemerkt haben, query Builder für workout
sind unterschiedlich:
$workout = DB::table('workouts')->where('user_id', '=', $user->id)->get();
und
$workout = DB::table('workouts')->where('name', '=', $name)->first();
Auf die profile
anzeigen, bekomme ich ein Objekt mit der ->get();
Methode, aber auf die add-exercise
Ansicht, die ich verwenden muss ->first();
oder ich sonst ein array mit nur einem index, wo kann ich dann den Zugriff auf das Objekt, d.h. $workout[0]->name
statt $workout->name
.
Warum ist das so? Sollte ich nicht in der Lage sein, um entweder get
- und/oder first
in beiden Controllern und erwarten die gleiche Art von Ergebnis von beiden, da ich möchte das gleiche von der gleichen Tabelle?
first()
wird immer nur zurück keiner oder ein Objekt, so dass es zurückgeben kann, einen geraden Gegenstand, ohne dass eine SammlungWenn Sie
var_dump($workout)
von jedem, was Klasse ist jedes Objekt? Wenn ich mich erinnere, ->get()
zurückgeben sollte eine Sammlung der Ergebnisse, während ->first()
sollte ein Objekt zurückgeben, repräsentieren eine einzelne Zeile.das ist etwas, was Sie brauchen, um es manual...!! Laravel kann nicht für Sie tun..!! 🙂
InformationsquelleAutor Tiago | 2015-01-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
get()
gibt eine Sammlung von Objekten zu jeder Zeit. Dass die Sammlung kann 0 oder mehr Objekte, je nach den Ergebnissen der Abfrage.first()
Anrufeget()
unter der Haube, aber anstatt die Sammlung der Ergebnisse, es gibt den ersten Eintrag in der Sammlung (wenn es eine ist).Welche Methode Sie verwenden, hängt davon ab, was Sie brauchen. Brauchen Sie eine Auflistung aller Ergebnisse (nutzen
get()
), oder willst du einfach nur das erste Ergebnis in der Sammlung (verwenden Siefirst()
)?first()
zurücknull
InformationsquelleAutor patricus