UseEloquentBuilder

Specify a custom Eloquent builder class

Description: Specifies a custom Eloquent builder class to use for the model, replacing the default builder.

Namespace: Illuminate\Database\Eloquent\Attributes\UseEloquentBuilder

Added in: Laravel 12.19

Usage

use Illuminate\Database\Eloquent\Attributes\UseEloquentBuilder;
use Illuminate\Database\Eloquent\Model;
use App\Builders\PostBuilder;

// Before:
public function newEloquentBuilder($query)
{
    return new PostBuilder($query);
}

use Illuminate\Database\Eloquent\Attributes\UseEloquentBuilder;
use Illuminate\Database\Eloquent\Model;
use App\Builders\PostBuilder;

// After:
#[UseEloquentBuilder(PostBuilder::class)]
class Post extends Model
{
    //
}

// App\Builders\PostBuilder
use Illuminate\Database\Eloquent\Builder;

class PostBuilder extends Builder
{
    public function published(): static
    {
        return $this->where('is_published', true);
    }

    public function featured(): static
    {
        return $this->where('is_featured', true);
    }
}

// Usage:
Post::query()->published()->featured()->get();