Laravel lấy Model từ bộ sưu tập

Illuminate\Support\Collection là lớp cơ sở được sử dụng bởi nhiều loại bộ sưu tập trong Laravel, trong khi đó Illuminate\Database\Eloquent\Collection được sử dụng bởi các mô hình Laravel. Nó mở rộng lớp cơ sở với chức năng bổ sung và đặt bí danh cho lớp cơ sở CollectionBaseCollection và được trả về khi thực hiện các yêu cầu phổ biến của trình tạo truy vấn Laravel hoặc yêu cầu thông qua chức năng của lớp mô hình, chẳng hạn như get(). Một bộ sưu tập thông thường được khởi tạo thông qua collect(["foo", "bar"])

Cả hai lớp dẫn đến một tập hợp các phương thức hơi khác nhau; . Tuy nhiên, trong phân lớp thứ có các câu lệnh "escape-hatch" kỳ lạ cố gắng đảm bảo tính tương thích giữa hai thể hiện của bộ sưu tập, nhưng thay vào đó lại gây nhầm lẫn thay vì trả về lỗi ngay lập tức. Kiểm tra sự khác biệt giữa phương pháp

// Check if Eloquent model
if ($variable instanceof \Illuminate\Database\Eloquent\Model) {
0 và
// Check if Eloquent model
if ($variable instanceof \Illuminate\Database\Eloquent\Model) {
1 giữa hai lần triển khai để điều tra sự khác biệt

Xác định xem Collection hay Eloquent Model

Sử dụng

// Check if Eloquent model
if ($variable instanceof \Illuminate\Database\Eloquent\Model) {
2 để xác minh xem một biến đã cho là một tập hợp hay một mô hình Eloquent

// Check if collection
if ($variable instanceof \Illuminate\Support\Collection) {
// Check if Eloquent model
if ($variable instanceof \Illuminate\Database\Eloquent\Model) {

Bạn có thể thường muốn trích xuất một số dữ liệu nhất định từ bộ sưu tập tôi. e Bộ sưu tập hùng hồn. Cách cơ bản là lặp qua bộ sưu tập và giải nén nhưng Bộ sưu tập Laravel có các phương thức trợ giúp mạnh mẽ trong đó phương thức Pluck() giúp đạt được điều tương tự rất dễ dàng

Hãy xem xét một số trường hợp sử dụng với các ví dụ

Trích xuất một cột từ Laravel Collection bằng Laravel Pluck()

Giả sử bạn muốn lấy địa chỉ email từ Bộ sưu tập người dùng

Trích xuất nhiều cột ở dạng giá trị Cặp khóa bằng cách sử dụng Laravel Pluck()

Hàm Laravel Pluck() cũng cho phép bạn trích xuất nhiều cột ở dạng key-value. Điều này có thể hữu ích trong các trường hợp sử dụng khác nhau

Hãy xem xét một ví dụ

Hỗ trợ bạn muốn lấy dữ liệu Tên → Email từ bộ sưu tập người dùng của Laravel

Để trích xuất giá trị cặp khóa, đối số thứ hai được đặt làm khóa. Trong ví dụ của chúng tôi, tôi đã chuyển "email" làm đối số thứ hai, do đó địa chỉ email được sử dụng làm khóa trong khi tên là giá trị

Ghi chú. Bạn không thể trích xuất nhiều hơn 2 cột từ Bộ sưu tập Laravel thông qua phương thức nhổ(). Để làm được điều đó, bạn nên sử dụng phương thức select()

Hàm Laravel Pluck() không chỉ giúp trích xuất dữ liệu từ mô hình chính mà còn cho phép lấy dữ liệu từ các mô hình quan hệ

Hãy lấy cặp khóa → giá trị của địa chỉ email và tiểu sử của người dùng

Ghi chú. Lưu ý ở đây tôi đang sử dụng get() để lần đầu tiên truy xuất dữ liệu quan hệ. Nếu không có get(), nhổ sẽ không có quyền truy cập vào dữ liệu quan hệ, vì chúng tôi đang háo hức tải quan hệ qua with(). Nếu chúng ta nối quan hệ theo cách thủ công thì get() là không cần thiết và chúng ta có thể nhổ trực tiếp. Kiểm tra ví dụ dưới đây

Chúng tôi đã xem xét tất cả các trường hợp sử dụng để lấy dữ liệu từ Laravel Collection. Nhân tiện, ở đây chúng ta đang sử dụng hàm pull() trên Eloquent Collection. Theo cách tương tự, nó cũng có thể được sử dụng trên Bộ sưu tập Laravel thông thường

Laravel đi kèm với trình bao bọc rất mạnh mẽ và thuận tiện để làm việc với mảng. Bạn phải đặc biệt sử dụng các bộ sưu tập trong Laravel khi làm việc với Eloquent. Eloquent trả về kết quả truy vấn trong đối tượng Collection tùy chỉnh ~ Lớp Eloquent Collection được kế thừa từ Laravel Collections, do đó, nó kế thừa tất cả các phương thức mạnh mẽ do Laravel Collection cung cấp và trên hết, cung cấp thêm một số phương thức tuyệt vời để sử dụng

Laravel lấy Model từ bộ sưu tập

Trong bài viết này, chúng tôi sẽ xem xét một số phương pháp Bộ sưu tập Laravel tốt nhất và phải biết để giúp cuộc sống của bạn dễ dàng hơn khi làm việc với Laravel

Ghi chú. Hãy nhớ rằng, Eloquent Collection kế thừa lớp Laravel Base Collection, do đó nó có quyền truy cập vào tất cả các phương thức của Base Collection nhưng đối tượng Base Collection không thể truy cập các phương thức tùy chỉnh do eloquent collection cung cấp

Hãy xem cách bạn có thể tạo Laravel Base Collection Object đơn giản

$todocollection = collect([
    [
        'user_id' => '1',
        'title' => ‘Do Laundry,
        ‘description => ‘I ‘have to do laundry ‘
    ],
    [
         'user_id' => '1',
        'title' => ‘Finish Assignment,
        ‘description => ‘I have to finish Maths assignment ‘
    ],
]);

Đây là cách bạn có thể tạo đối tượng Laravel Collection. Bạn có thể sử dụng tất cả các phương thức mạnh mẽ do Laravel Collection cung cấp

Bây giờ, hãy xem một ví dụ về đối tượng Eloquent Collection

$todos = ToDo::where('user_id',1)->get();

Ở đây, $todos là một đối tượng bộ sưu tập hùng hồn chứa các kết quả truy vấn. Nó chỉ đơn giản là một mảng từ bên trong với một số phương thức thu thập mạnh mẽ theo ý của bạn. Bạn vẫn có thể sử dụng các phương thức của Laravel Collection nhưng Eloquent Collection cũng cung cấp các phương thức bổ sung. Bạn có thể thực hiện nhiều việc khác nhau như chuyển đổi thành mảng, lọc bộ sưu tập, sắp xếp, lập bản đồ, v.v.

Hãy xem xét một số Phương thức thu thập Laravel tốt nhất và phải biết

1)  tất cả()

Lớp Bộ sưu tập của Laravel có một thuộc tính được bảo vệ được gọi là $items chứa một mảng chứa tất cả dữ liệu. Trình bao bọc bộ sưu tập cung cấp các phương thức bổ sung để hoạt động trên mảng đó. Nhưng nếu bạn chỉ muốn mảng không có chuông và còi thì có một phương pháp cho điều đó

2) trung bình()

Phương thức trung bình được cung cấp bởi Laravel Collection trả về giá trị trung bình. Theo mặc định, nó sẽ cung cấp giá trị trung bình của tất cả các giá trị trong bộ sưu tập. Tuy nhiên, nếu bộ sưu tập chứa cặp khóa => giá trị, thì bạn có thể cung cấp khóa cho hàm và nó sẽ tự động tính trung bình của tất cả các giá trị cho khóa đó

3) mỗi()

Mỗi phương thức cho Laravel Collection tương tự như hàm map trên mảng trong PHP và JavaScript. Mỗi phương thức về cơ bản lấy từng phần tử từ bộ sưu tập và áp dụng chức năng gọi lại trên đó. Phương pháp này có thể được sử dụng để áp dụng các thao tác trên từng phần tử, sửa đổi từng phần tử, v.v.

4) đoạn ()

chunk() phương thức được sử dụng để chia Laravel Collection thành nhiều chunk có kích thước nhất định

$users = User::all();
$userschunk = $users->chunk(2);

dd($userschunk->toArray());

array:3 [▼
  0 => array:2 [▼
    0 => array:3 [▼
      "id" => 1
      "name" => "John Doe"
      "email" => "[email protected]"
    ]
    1 => array:3 [▼
      "id" => 2
      "name" => "Jack Halt"
      "email" => "[email protected]"
    ]
  ]
  1 => array:1 [▼
    2 => array:3 [▼
      "id" => 3
      "name" => "Sam Pitt"
      "email" => "[email protected]"
    ]
  ]
]

cũng đọc

5) chứa()

Thông thường, bạn sẽ cần kiểm tra xem một bộ sưu tập có chứa giá trị hay không. Laravel Collection cung cấp phương pháp dễ dàng để kiểm tra xem

Phương thức contains() được sử dụng để kiểm tra xem bộ sưu tập laravel có chứa giá trị được truyền cho nó dưới dạng tham số hay không. Nó sẽ trả về một giá trị boolean - đúng nếu nó chứa và sai nếu không

Nó cũng có thể chấp nhận cặp khóa và giá trị để tìm kiếm chi tiết hơn. Nó sẽ kiểm tra xem cặp đã cho có tồn tại hay không

Bạn cũng có thể truyền hàm gọi lại với điều kiện của riêng mình để kiểm tra xem có bất kỳ giá trị nào vượt qua điều kiện đã cho hay không

Phương thức contains() sẽ sử dụng phép so sánh lỏng lẻo để áp dụng điều kiện. Để so sánh chặt chẽ hơn, bạn có thể sử dụng phương thức containsStrict()

6) đếm() & đếmBy()

Đây là phương pháp rất đơn giản nhưng rất hữu ích được cung cấp bởi Laravel Collection. Bạn cần đếm bao nhiêu lần các mục trong Laravel Collection hoặc một mảng?

Phương thức Count() đưa ra tổng số mục trong Bộ sưu tập Laravel đã cho

Bộ sưu tập của Laravel cũng cung cấp phương pháp nâng cao hơn để đếm các mục của nó

Phương thức CountBy() đưa ra số lần xuất hiện của mục trong Bộ sưu tập Laravel nhất định trong mảng

7) bộ lọc()

Phương thức filter() là một trong những phương thức Collection phổ biến và hữu ích nhất của Laravel. Nó cho phép bạn lọc bộ sưu tập của mình bằng chức năng gọi lại đã qua. Nó trả về bộ sưu tập mới với các mục đã lọc và không thay đổi bộ sưu tập gốc

Hàm gọi lại được cung cấp với khóa và giá trị làm tham số mà bạn có thể sử dụng để tạo điều kiện lọc

Nếu bạn không cung cấp bất kỳ chức năng gọi lại nào, thì chức năng này sẽ chỉ xóa bất kỳ mục nào tương đương với false__. Vì vậy, các giá trị như null, false, '', 0, [] sẽ bị lọc ra. Phương pháp này là cách dễ nhất để loại bỏ mọi mục trống trong bộ sưu tập

8) nhận()

get() là một phương thức trả về giá trị tại khóa mà bạn truyền cho nó dưới dạng tham số. Nếu không có khóa nào được chuyển thì null được trả về

9) tìm kiếm()

search() là một phương thức Collection nhỏ nhưng hữu ích khác của Laravel. Nó tìm kiếm Bộ sưu tập cho giá trị đã cho và trả về chỉ mục nếu tìm thấy. Nếu không tìm thấy thì sẽ trả về false

10) nhómBy()

Thường thì bạn sẽ cần nhóm dữ liệu theo dữ liệu nhất định. Thông thường, bạn sẽ nhóm ở cấp cơ sở dữ liệu, nhưng vẫn có nhiều trường hợp sử dụng mà bạn có thể cần nhóm thêm dữ liệu trong bộ sưu tập

Bộ sưu tập Laravel cung cấp phương pháp tiện dụng chỉ dành cho điều đó. Nó hoạt động tương tự như Eloquent's groupBy và nhóm các mục theo khóa đã cho

11) tối đa()

Trong Excel, bạn có thể sử dụng hàm này nhiều lần để lấy giá trị lớn nhất trong một cột hoặc một hàng. Tương tự, Bộ sưu tập của Laravel cung cấp hàm max() để lấy giá trị lớn nhất của khóa đã cho trong số các mục của bộ sưu tập

Nếu bạn không chuyển bất kỳ phím nào cho hàm max(), thì hàm này sẽ chỉ so sánh từng mục và trả về mục cao nhất

12) gảy()

gảy () là một trong những phương pháp yêu thích và được sử dụng nhiều nhất của tôi cho Bộ sưu tập Laravel và thường xuyên hơn cho Bộ sưu tập Eloquent. Nó cho phép chúng tôi tìm nạp các giá trị cho khóa đã cho từ bộ sưu tập trong mảng

13) quên ()

quên () là một phương thức thu thập của laravel, chỉ cần xóa khóa đã cho và giá trị của nó khỏi tất cả các mục trong bộ sưu tập

14) đếnArray()

toArray() là một phương thức Bộ sưu tập Laravel đơn giản để chuyển đổi đối tượng bộ sưu tập của bạn thành một mảng php đơn giản

15) sắp xếpBy()

sortBy() là một phương pháp rất hữu ích để sắp xếp Bộ sưu tập Laravel của bạn theo khóa đã cho. Nó giữ lại các khóa ban đầu, chỉ sắp xếp lại các mục trong bộ sưu tập theo điều kiện sắp xếp

Để sắp xếp nâng cao hơn, bạn cũng có thể chuyển hàm gọi lại sẽ xử lý cách sắp xếp các mục

Tóm lại, đây là những phương pháp Bộ sưu tập Laravel tốt nhất mà bạn phải biết với tư cách là nhà phát triển Laravel. Có rất nhiều phương thức khác được cung cấp bởi Laravel Collections mà bạn có thể kiểm tra tại Laravel Documentation

Làm cách nào để lặp qua Bộ sưu tập trong Laravel?

Tất cả các bộ sưu tập cũng đóng vai trò là trình vòng lặp, cho phép bạn lặp qua chúng như thể chúng là các mảng PHP đơn giản. .
$users = Ứng dụng\Người dùng. trong đó ('hoạt động', 1) -> get();
foreach ($user là $user) {
tiếng vang $user->name;

gảy() trong Laravel là gì?

Laravel Pluck() là một phương thức Bộ sưu tập của Laravel được sử dụng để trích xuất các giá trị nhất định từ bộ sưu tập . Bạn có thể thường muốn trích xuất một số dữ liệu nhất định từ bộ sưu tập tôi. e Bộ sưu tập hùng hồn.

Làm cách nào để truy cập mảng đối tượng trong Laravel?

Vì các khóa học là một mảng, bạn nên chọn một đối tượng bằng cách sử dụng chỉ mục thích hợp . ví dụ kẻ thù. thử $classroom->courses[0]->id thay vì $classroom->courses->id. Ở đây, '0' là chỉ số. Ngoài ra, sẽ tốt hơn nếu bạn kiểm tra xem chỉ mục có tồn tại trước khi bạn thực hiện không.

Làm cách nào để kiểm tra xem Bộ sưu tập có giá trị trong Laravel không?

Phương thức Laravel contains() . Nếu bạn truyền một giá trị cho phương thức contains(), nó sẽ kiểm tra xem bộ sưu tập có bất kỳ giá trị nào khớp với tham số hay không.