2015-10-08 5 views
14

Was ist der Unterschied zwischen diesen MethodenWas ist der Unterschied zwischen Fund ist(), findOrFail(), erste(), firstOrFail(), get(), Liste(), toArray()

  1. find (
  2. )
  3. findOrFail()
  4. erste()
  5. firstOrFail()
  6. get()
  7. Liste()
  8. toArray()

Ich habe mit ihnen worden und jeder gibt ein anderes Ergebnis und manchmal brauche ich toArray() am Ende get() hinzuzufügen, weil meine Funktion ein Array erwartet. Werden die anderen Methoden nicht auch Arrays erzeugen?

+1

Sehen Sie sich die [Query Builder-Dokumente] (http://laravel.com/docs/5.1/queries#retrieving-results) sowie die [Eloquent API-Referenz] (http://laravel.com) an /api/5.1/Illuminate/Database/Eloquent/Builder.html). –

Antwort

43
  1. find($id) nimmt eine ID und gibt ein einziges Modell. Wenn kein passendes Modell existiert, gibt es null zurück.

  2. findOrFail($id) nimmt eine ID und gibt ein einzelnes Modell zurück. Wenn kein passendes Modell existiert, wird ein Fehler ausgegeben.

  3. first() gibt den ersten Datensatz in der Datenbank zurück. Wenn kein passendes Modell existiert, gibt es null zurück.

  4. firstOrFail() gibt den ersten Datensatz in der Datenbank zurück. Wenn kein passendes Modell existiert, wird ein Fehler ausgegeben.

  5. get() gibt eine Sammlung von Modellen zurück, die der Abfrage entsprechen.

  6. pluck($column) gibt eine Auflistung der Werte in der angegebenen Spalte zurück. In früheren Versionen von Laravel wurde diese Methode lists genannt.

  7. toArray() konvertiert das Modell/die Sammlung in ein einfaches PHP-Array.


Anmerkung:a collection ist ein beefed Array. Es funktioniert ähnlich wie ein Array, hat aber viele zusätzliche Funktionen, wie Sie in the docs sehen können.

Leider können Sie mit PHP kein Sammelobjekt überall dort verwenden, wo Sie ein Array verwenden können. Zum Beispiel, die Verwendung einer Sammlung in einer foreach Schleife ist in Ordnung, setzen Sie es auf array_map ist nicht. Wenn Sie ein Argument als array eintippen, lässt Sie PHP es auch nicht passieren, wenn Sie es als Sammlung übergeben. Neuere Versionen von PHP haben den Typentyp iterable, mit dem sowohl Arrays als auch Collections akzeptiert werden können.

Wenn Sie jemals ein einfaches Array aus einer Sammlung erhalten möchten, rufen Sie die all() Methode auf.

+1

Danke für das Aufräumen. Hier ist die Sache, ich versuche, eine Liste von Posts wie diese zu bekommen $ post = Post :: mit ('user.votes') -> mit ('subreddit.moderators') -> findOrFail ($ post-> id) ; 'so kann ich auf' $ post-> subreddit-> moderators-> user_id' zugreifen, aber das gibt 'Undefined property: Illuminate \ Database \ Eloquent \ Collection :: $ user_id' - Ich kann auf '$ post-> subreddit- zugreifen. > Moderatoren', aber nicht, wenn ich 'user_id' hinzugefügt habe - warum ist das so? – Halnex

+0

'subreddit' ist ein einzelnes Modell mit einer 'Moderatoren'-Eigenschaft. 'Moderatoren' ist eine Sammlung, kein einzelnes Modell. Sie können nicht direkt darauf zugreifen. Sie können das erste überprüfen, wenn Sie wollen: '$ post-> subreddit-> Moderatoren [0] -> user_id' –

Verwandte Themen