web-dev-qa-db-ja.com

find()、findOrFail()、first()、firstOrFail()、get()、list()、toArray()の違いは何ですか

これらの方法の違いは何ですか:

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

私はそれらを使用していましたが、それぞれが異なる結果を与え、関数が配列を期待しているため、時々toArray()の最後にget()を追加する必要があります。他のメソッドも配列を生成しませんか?

58
Halnex
  1. find($id)はidを受け取り、単一のモデルを返します。一致するモデルが存在しない場合は、nullを返します。

  2. findOrFail($id)はidを受け取り、単一のモデルを返します。一致するモデルが存在しない場合、エラーがスローされます1

  3. first()は、データベースで見つかった最初のレコードを返します。一致するモデルが存在しない場合は、nullを返します。

  4. firstOrFail()は、データベースで見つかった最初のレコードを返します。一致するモデルが存在しない場合、エラーがスローされます1

  5. get()は、クエリに一致するモデルのコレクションを返します。

  6. pluck($column)は、指定された列の値のみのコレクションを返します。 Laravelの以前のバージョンでは、このメソッドはlistsと呼ばれていました。

  7. toArray()は、モデル/コレクションを単純なPHP配列に変換します。


注:コレクション は強化された配列です。配列と同様に機能しますが、 ドキュメント でわかるように、多くの機能が追加されています。

残念ながら、PHPでは、配列を使用できるすべての場所でコレクションオブジェクトを使用することはできません。たとえば、foreachループでコレクションを使用することは問題ありませんが、array_mapに渡すことはできません。同様に、arrayとして引数を入力する場合、PHPはコレクションに渡すことができません。 PHPの新しいバージョンにはiterable typehintがあり、これを使用して配列とコレクションの両方を受け入れることができます。

コレクションから単純な配列を取得したい場合は、その all() メソッドを呼び出します。


1 findOrFailメソッドとfirstOrFailメソッドによってスローされるエラーは、 ModelNotFoundException です。自分でこの例外をキャッチしなかった場合は、 Laravelは404で応答します であり、ほとんどの場合これが必要です。

141
Joseph Silber

@Joseph Silberからのすべての情報は正確で非常に有用です。

List()に回答を追加したい

From Laravel 5.2 Collection、query builder、およびEloquent query builderオブジェクトのlistメソッドは、pluckに名前が変更されました。メソッドのシグネチャは同じままです。

1
Nirav Bhoi