2015-10-08 3 views
14

これらの方法の違いは検索の違いは何ですか()、findOrFail()、最初の()、firstOrFail()、取得()、リスト()、内のtoArray()

  1. のfind(何ですか)
  2. findOrFail()
  3. 最初の()
  4. firstOrFail()
  5. のget()
  6. リスト()
  7. のtoArray()

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

+1

[クエリービルダーのドキュメント](http://laravel.com/docs/5.1/queries#retrieving-results)、[Eloquent APIリファレンス](http://laravel.com /api/5.1/Illuminate/Database/Eloquent/Builder.html)。 –

答えて

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

  2. はidを取り、単一のモデルを返します。一致するモデルが存在しない場合、エラーをスローします。

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

  4. firstOrFail()は、データベースにある最初のレコードを返します。一致するモデルが存在しない場合、エラーをスローします。

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

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

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


注:a collectionは、強化し、アレイです。 the docsのように、配列と同様に機能しますが、多くの機能が追加されています。

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

コレクションからプレーンな配列を取得する場合は、all()メソッドを呼び出します。

+1

クリアしていただきありがとうございます。ここでは、私は '$ post = Post :: with( 'user.votes') - >( 'subreddit.moderators') - > findOrFail($ post-> id)のような投稿のリストを取得しようとしています。 ;} '$ post-> subreddit-> moderators-> user_id'にアクセスできますが、' Undefined property:Illuminate \ Database \ Eloquent \ Collection :: $ user_id'を与えています。 > moderators'だが、 'user_id'を追加したときはそうではありません - それはなぜですか? – Halnex

+0

'subreddit'は' moderators'プロパティを持つ単一のモデルです。 'モデレータ 'はコレクションであり、単一のモデルではありません。あなたはそれから直接アクセスすることはできません。あなたが望むなら、最初のものをチェックすることができます: '$ post-> subreddit->モデレータ[0] - > user_id' –

関連する問題