web-dev-qa-db-fra.com

Quelle est la différence entre find (), findOrFail (), first (), firstOrFail (), get (), list (), toArray ()

Quelle est la différence entre ces méthodes:

  1. find()
  2. findOrFail()
  3. first()
  4. firstOrFail()
  5. get()
  6. list()
  7. toArray()

Je les utilise et chacun donne un résultat différent. Parfois, je dois ajouter toArray() à la fin de get() parce que ma fonction attend un tableau. Les autres méthodes ne produiront-elles pas également des tableaux?

58
Halnex
  1. find($id) prend un identifiant et renvoie un modèle unique. Si aucun modèle correspondant n'existe, il retourne null.

  2. findOrFail($id) prend un identifiant et renvoie un modèle unique. Si aucun modèle correspondant n'existe, une erreur est générée.1.

  3. first() renvoie le premier enregistrement trouvé dans la base de données. Si aucun modèle correspondant n'existe, il retourne null.

  4. firstOrFail() renvoie le premier enregistrement trouvé dans la base de données. Si aucun modèle correspondant n'existe, une erreur est générée.1.

  5. get() renvoie une collection de modèles correspondant à la requête.

  6. pluck($column) renvoie une collection contenant uniquement les valeurs de la colonne donnée. Dans les versions précédentes de Laravel, cette méthode s'appelait lists.

  7. toArray() convertit le modèle/la collection en un simple tableau PHP.


Remarque: ne collection est un tableau renforcé. Son fonctionnement est similaire à celui d'un tableau, mais il comporte de nombreuses fonctionnalités supplémentaires, comme vous pouvez le constater dans la documentation .

Malheureusement, PHP ne vous permet pas d'utiliser un objet de collection partout où vous pouvez utiliser un tableau. Par exemple, l’utilisation d’une collection dans une boucle foreach est acceptable, il est préférable de la transmettre à array_map. De même, si vous tapez un argument comme array, PHP ne vous laissera pas lui transmettre une collection. Les versions les plus récentes de PHP ont le typehint iterable, qui peut être utilisé pour accepter les tableaux et les collections.

Si vous souhaitez obtenir un tableau brut d'une collection, appelez sa méthode all() .


1 L'erreur générée par les méthodes findOrFail et firstOrFail est un ModelNotFoundException . Si vous ne détectez pas cette exception vous-même, Laravel répondra par un 404 , ce que vous souhaitez la plupart du temps.

141
Joseph Silber

Toutes les informations de @Joseph Silber sont correctes et très utiles.

Je veux ajouter une réponse à list ()

De Laravel 5.2) La méthode de liste des objets Collection, Constructeur de requêtes et Constructeur de requêtes Eloquent a été renommée en plume. La signature de la méthode reste la même.

1
Nirav Bhoi