2015-10-08 14 views
14

sự khác biệt giữa các phương pháplà gì sự khác biệt giữa find(), findOrFail(), lần đầu tiên(), firstOrFail(), get(), danh sách(), toArray()

  1. tìm là gì ()
  2. findOrFail()
  3. đầu tiên()
  4. firstOrFail()
  5. get()
  6. list()
  7. toArray()

Tôi đã sử dụng và mỗi kết quả khác nhau và đôi khi tôi cần thêm toArray() vào cuối vì chức năng của tôi đang mong đợi một mảng. Liệu các phương pháp khác cũng không tạo ra các mảng?

+1

Hãy xem [Tài liệu trình tạo truy vấn] (http://laravel.com/docs/5.1/queries#retrieving-results), cũng như [tham chiếu API Eloquent] (http://laravel.com) /api/5.1/Illuminate/Database/Eloquent/Builder.html). –

Trả lời

43
  1. find($id) mất một id và trả về một mô hình duy nhất. Nếu không có mô hình phù hợp nào tồn tại, nó trả về null.

  2. findOrFail($id) lấy id và trả về một mô hình duy nhất. Nếu không có mô hình phù hợp nào tồn tại, nó sẽ phát ra lỗi.

  3. first() trả về bản ghi đầu tiên được tìm thấy trong cơ sở dữ liệu. Nếu không có mô hình phù hợp nào tồn tại, nó trả về null.

  4. firstOrFail() trả về bản ghi đầu tiên được tìm thấy trong cơ sở dữ liệu. Nếu không có mô hình phù hợp nào tồn tại, nó sẽ phát ra lỗi.

  5. get() trả về tập hợp các mô hình phù hợp với truy vấn.

  6. pluck($column) trả về một tập hợp chỉ các giá trị trong cột nhất định. Trong các phiên bản trước của Laravel, phương thức này được gọi là lists.

  7. toArray() chuyển đổi mô hình/tập hợp thành một mảng PHP đơn giản.


Lưu ý:a collection là một mảng tăng cường. Nó hoạt động tương tự như một mảng, nhưng có rất nhiều chức năng bổ sung, như bạn có thể thấy trong the docs.

Thật không may, PHP không cho phép bạn sử dụng đối tượng bộ sưu tập ở mọi nơi bạn có thể sử dụng mảng. Ví dụ: sử dụng bộ sưu tập trong vòng kết nối foreach là ok, hãy chuyển nó tới array_map thì không. Tương tự, nếu bạn nhập gợi ý một đối số là array, PHP sẽ không cho phép bạn chuyển một bộ sưu tập đó. Các phiên bản PHP mới hơn có loại iterable, có thể được sử dụng để chấp nhận cả mảng và bộ sưu tập.

Nếu bạn muốn lấy một mảng đơn giản từ bộ sưu tập, hãy gọi phương thức all() của nó.

+1

Cảm ơn bạn đã rõ ràng. Đây là điều, tôi đang cố gắng để có được một danh sách các bài viết như thế này '$ post = Post :: với ('user.votes') -> với ('subreddit.moderators') -> findOrFail ($ post-> id) ; 'vì vậy tôi có thể truy cập' $ post-> subreddit-> moderators-> user_id' nhưng điều đó cho 'thuộc tính không xác định: Illuminate \ Database \ Eloquent \ Collection :: $ user_id' - Tôi có thể truy cập' $ post-> subreddit- > moderators' nhưng không phải khi tôi thêm 'user_id' - tại sao vậy? – Halnex

+0

'subreddit' là một mô hình duy nhất, với thuộc tính' moderators'. 'moderators' là một bộ sưu tập, không phải là một mô hình duy nhất. Bạn không thể truy cập bất cứ điều gì trực tiếp từ nó. Bạn có thể kiểm tra cái đầu tiên nếu muốn: '$ post-> subreddit-> moderators [0] -> user_id' –

Các vấn đề liên quan