2015-10-08 31 views
14

是什麼這些方法是什麼()之間找到的差異,findOrFail(),第(),firstOrFail(),獲得(),列表(),指定者()

  1. 之間找到的差異( )
  2. findOrFail()
  3. 第()
  4. firstOrFail()
  5. 的get()
  6. 列表()
  7. 指定者()

我一直在使用他們,每個人給出了不同的結果,有時我需要在get()末增加toArray()因爲我的函數需要一個數組。其他方法不會產生數組嗎?

+1

查看[Query Builder文檔](http://laravel.com/docs/5.1/queries#retrieving-results)以及[Eloquent API reference](http://laravel.com) /api/5.1/Illuminate/Database/Eloquent/Builder.html)。 –

回答

43
  1. find($id)有一個id,並返回一個單一的模式。如果不存在匹配的模型,則返回null

  2. findOrFail($id)需要一個id並返回一個模型。如果不存在匹配的模型,則會引發錯誤。

  3. first()返回在數據庫中找到的第一條記錄。如果不存在匹配的模型,則返回null

  4. firstOrFail()返回在數據庫中找到的第一條記錄。如果不存在匹配的模型,則會引發錯誤。

  5. get()返回與查詢匹配的模型集合。

  6. pluck($column)僅返回給定列中值的集合。在以前的Laravel版本中,這種方法被稱爲lists

  7. toArray()將模型/集合轉換爲簡單的PHP數組。


注:a collection是加強了陣列。它的功能類似於數組,但具有很多附加功能,如您在the docs中所見。

不幸的是,PHP不允許在任何地方使用集合對象來使用數組。例如,在foreach循環中使用集合是可以的,把它傳遞給array_map不是。同樣,如果您鍵入提示參數array,PHP不會讓您傳遞它的集合。較新版本的PHP具有iterable typehint,可用於接受數組和集合。

如果您想要從集合中獲取普通數組,請調用其all()方法。

+1

謝謝你的澄清。這裏的東西,我想獲得這樣的職位列表'$ 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'時 - 爲什麼? – Halnex

+0

'subreddit'是一個單一的模型,具有'moderators'屬性。 'moderator'是一個集合,而不是一個模型。您無法直接訪問任何內容。你可以檢查第一個,如果你想:'$ post-> subreddit-> moderators [0] - > user_id' –

相關問題