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?

Nein, weil ein Ergebnis mit get() kann aus keiner, einer oder mehreren Objekten; so erhalten Sie immer eine collection zurück; in der Erwägung, dass first() wird immer nur zurück keiner oder ein Objekt, so dass es zurückgeben kann, einen geraden Gegenstand, ohne dass eine Sammlung
Wenn 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

Schreibe einen Kommentar