これらの方法の違いは何ですか:
find()
findOrFail()
first()
firstOrFail()
get()
list()
toArray()
私はそれらを使用してきましたが、それぞれが異なる結果をもたらし、関数が配列を期待しているため、toArray()
最後に追加する必要がある場合がありget()
ます。他の方法でも配列が生成されませんか?
これらの方法の違いは何ですか:
find()
findOrFail()
first()
firstOrFail()
get()
list()
toArray()
私はそれらを使用してきましたが、それぞれが異なる結果をもたらし、関数が配列を期待しているため、toArray()
最後に追加する必要がある場合がありget()
ます。他の方法でも配列が生成されませんか?
回答:
find($id)
IDを受け取り、単一のモデルを返します。一致するモデルが存在しない場合は、を返しますnull
。
findOrFail($id)
IDを受け取り、単一のモデルを返します。一致するモデルが存在しない場合、エラー1がスローされます。
first()
データベースで見つかった最初のレコードを返します。一致するモデルが存在しない場合は、を返しますnull
。
firstOrFail()
データベースで見つかった最初のレコードを返します。一致するモデルが存在しない場合、エラー1がスローされます。
get()
クエリに一致するモデルのコレクションを返します。
pluck($column)
指定された列の値のみのコレクションを返します。Laravelの以前のバージョンでは、このメソッドはと呼ばれていましたlists
。
toArray()
モデル/コレクションを単純なPHP配列に変換します。
注: コレクションは強化された配列です。配列と同様に機能しますが、ドキュメントで確認できるように、多くの追加機能があります。
残念ながら、PHPでは、配列を使用できるすべての場所でコレクションオブジェクトを使用することはできません。たとえば、foreach
ループでコレクションを使用することarray_map
は問題ありませんが、コレクションを渡すことは問題ありません。同様に、引数をとしてタイプヒントするとarray
、PHPではコレクションを渡すことができません。PHP 7.1以降、配列とコレクションの両方を受け入れるために使用できるiterable
typehintがあります。
コレクションからプレーン配列を取得したい場合は、そのall()
メソッドを呼び出します。
1findOrFail
およびfirstOrFail
メソッドによってスローされるエラーはModelNotFoundException
です。この例外を自分でキャッチしない場合、Laravelは404で応答します。これは、ほとんどの場合に必要なものです。
$post = Post::with('user.votes')->with('subreddit.moderators')->findOrFail($post->id);
が問題です。アクセスできるようにこのような投稿のリストを取得しようとしています$post->subreddit->moderators->user_id
が、アクセスできますが、追加したときUndefined property: Illuminate\Database\Eloquent\Collection::$user_id
はアクセスでき$post->subreddit->moderators
ませんuser_id
。なぜですか。
subreddit
moderators
プロパティを持つ単一のモデルです。moderators
はコレクションであり、単一のモデルではありません。そこから直接アクセスすることはできません。あなたがしたい場合は、最初のものを確認することができます$post->subreddit->moderators[0]->user_id