Laravel Eloquent firstOrFail gibt alle Datensätze in der Tabelle
Ich versuche zum abrufen einer Zeile in meiner eloquenten Modell. Was ich will zu tun ist, suchen Sie zuerst, um zu sehen, wenn es vorhanden ist, oder eine Ausnahme werfen. In der Laravel docs, heißt es, die ich nutzen kann firstOrFail
oder findOrFail
. Der beredte Abfrage ist wie folgt:
Game::where('game', 'game-name')->firstOrFail()->remember(60)->get()
Dies funktioniert für die Ermittlung des Datensatzes und eine Ausnahme werfen, wenn nicht gefunden, gibt aber alle Zeilen als Ergebnis. Was ich tun möchte, ist nur wieder die Zeile, die ich gesucht habe. Ich bin nicht die Indizierung durch primär-Schlüssel in diesem Beispiel, so findOrFail nicht funktioniert.
Wenn ich ersetzen ->get()
mit ->first()
alle es tut, ist die Rückkehr der ersten Zeile in der Tabelle. Es ignoriert die ::where()
.
EDIT:, Wenn ich entfernt ->get()
und ->remember()
es wieder in die gewünschte Zeile, jedoch möchte ich noch mal cache die Abfrage aber wenn ich ->remember()
und print_r auf das Ergebnis, die gesamte eloquent Modell ausgegeben wird.
EDIT2: Alle behoben ist. Ich habe immer verwechseln den Ort der ->remember()
. Der richtige Weg, dies zu tun ist:
Game::where('game', 'game-name')->remember(60)->firstOrFail()
first
firstOrFail
get
find
etc, die Sie haben zu kümmern. Alle von Ihnen führen Sie die Abfrage und zurück collection
/model
/null
(oder array
), so dass Sie in der Tat führen Sie die Abfrage, die Sie wollte, dann rief remember
und lief eine weitere Abfrage mit get
.InformationsquelleAutor davidxd33 | 2014-08-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Alle behoben ist.
Ich habe immer verwechseln den Ort der
->remember()
.Der richtige Weg, dies zu tun ist:
InformationsquelleAutor davidxd33
Falschen Ergebnis scheint zwischengespeichert werden, vermeiden Sie die Verwendung denken Sie daran, bis Sie die richtige Abfrage.
Wenn Sie bekommen wird es wieder eine Collection-Instanz.
findOrFail erwarten eine id als ersten parameter.
Das erste Ergebnis aus der Abfrage mit ersten und dann überprüfen, ob es leer ist, eine Exception werfen,
bitte postet eine Antwort mit der Lösung, die Sie gefunden, und akzeptieren Sie Ihre eigene Antwort. Es wird anderen helfen.
InformationsquelleAutor marcanuy