CollectedBy Attribute
CollectedBy Attribute
6 Sheet
Dalam Laravel 11, atribut CollectedBy memperkenalkan cara yang lebih sederhana untuk menentukan koleksi khusus (custom collection) bagi model Eloquent. Biasanya, jika Anda ingin model menggunakan koleksi khusus, Anda harus menimpa metode newCollection di model tersebut untuk mengatur koleksi yang berbeda. Metode ini memungkinkan model mengembalikan koleksi khusus yang bisa memiliki fungsi tambahan khusus untuk data model tersebut.
Dengan atribut CollectedBy, Laravel 11 membuat proses ini lebih mudah dan deklaratif. Anda dapat langsung menentukan kelas koleksi khusus di bagian atas model menggunakan #[CollectedBy(...)], tanpa perlu menimpa newCollection. Contohnya, jika Anda memiliki kelas koleksi khusus bernama UserCollection, Anda cukup menambahkan #[CollectedBy(UserCollection::class)] di model User. Laravel akan otomatis menggunakan UserCollection untuk operasi koleksi yang terkait dengan model User.
Ini mempermudah penambahan metode dan fungsi khusus pada koleksi tanpa konfigurasi tambahan, membuat kode lebih bersih dan lebih mudah dikelola.
Sebelum menggunakan collection khusus
Illuminate\Database\Eloquent\Collection {#1228 ▼ // routes/web.php:7 #items: array:10 [▶] #escapeWhenCastingToString: false}
Illuminate\Database\Eloquent\Collection: maka disini terlihat masih menggunakan Collection dari Eloquent
Membuat UserCollection
app\Collections\UserCollection.php
namespace App\Collections; use Illuminate\Support\Collection; class UserCollection extends Collection {}Cara Sebelum Laravel 11
Tambahkan fungsi ini di User model
public function newCollection(array $models = []){ return new UserCollection($models);}App\Collections\UserCollection {#1239 ▼ // routes/web.php:7 #items: array:10 [▶] #escapeWhenCastingToString: false}
App\Collections\UserCollection: maka disini terlihat menggunakan Collection dari UserCollection
Cara Baru Laravel 11
#[CollectedBy(UserCollection::class)]class User extends Authenticatable{}#[CollectedBy(UserCollection::class)] : cukup menambahkan ini di atas class model anda
App\Collections\UserCollection {#1239 ▼ // routes/web.php:7 #items: array:10 [▶] #escapeWhenCastingToString: false}
App\Collections\UserCollection: maka disini terlihat menggunakan Collection dari UserCollection
Komentar
Ada 0 komentar pada episode ini.