CollectedBy

Custom collection class

Description: Specifies a custom Eloquent collection class to use when retrieving multiple models.

Namespace: Illuminate\Database\Eloquent\Attributes\CollectedBy

Added in: Laravel 11.28

Usage

use Illuminate\Database\Eloquent\Attributes\CollectedBy;
use Illuminate\Database\Eloquent\Model;
use App\Collections\PostCollection;

// Before:
public function newCollection(array $models = [])
{
    return new PostCollection($models);
}

use Illuminate\Database\Eloquent\Attributes\CollectedBy;
use Illuminate\Database\Eloquent\Model;
use App\Collections\PostCollection;

// After:
#[CollectedBy(PostCollection::class)]
class Post extends Model
{
    //
}

// App\Collections\PostCollection
use Illuminate\Database\Eloquent\Collection;

class PostCollection extends Collection
{
    public function published(): static
    {
        return $this->filter(fn ($post) => $post->is_published);
    }
}