banulakwin / laravel-eloquent-columns
Reusable Eloquent traits and Blueprint macros: active, featured, sort order, timestamps/soft deletes, slugs (Spatie), audit columns.
Package info
github.com/banulalakwindu/laravel-eloquent-columns
pkg:composer/banulakwin/laravel-eloquent-columns
Requires
- php: ^8.4
- illuminate/auth: ^11.0|^12.0|^13.0
- illuminate/database: ^11.0|^12.0|^13.0
- illuminate/support: ^11.0|^12.0|^13.0
- spatie/laravel-sluggable: ^3.8
Requires (Dev)
- laravel/pint: ^1.21
- orchestra/testbench: ^9.0|^10.0|^11.0
- phpstan/phpstan: ^2.0
- phpunit/phpunit: ^11.0|^12.0
README
Portable Eloquent traits and Blueprint macros for common column patterns: active, featured, sort order, timestamps + soft deletes, slug pair (via Spatie Sluggable), audit user columns (created_by, updated_by, deleted_by), and SEO meta columns.
Activity/event logging is not included (intended as a separate package later).
Requirements
- PHP
^8.4 - Laravel
illuminate/*^11.0|^12.0|^13.0 spatie/laravel-sluggable^3.8(forHasSlugColumns)
Installation
Auto-discovery registers Banulakwin\EloquentColumns\EloquentColumnsServiceProvider.
composer require banulakwin/laravel-eloquent-columns
Optional publish:
php artisan vendor:publish --tag=eloquent-columns-config
| Config key | Purpose |
|---|---|
register_macros |
Register Blueprint macros on boot (default true). Env: ELOQUENT_COLUMNS_REGISTER_MACROS. |
user_model |
Class for HasAuditColumns creator() / updater() / deleter(). Falls back to auth.providers.users.model if empty. Env: ELOQUENT_COLUMNS_USER_MODEL. |
Traits (Banulakwin\EloquentColumns\Concerns)
| Trait | Notes |
|---|---|
HasActiveColumn |
is_active scope active(), helpers markActive / markInactive. Override getActiveColumn(). |
HasFeaturedColumn |
Same pattern for is_featured / featured scope. |
HasSortOrderColumn |
Scopes orderBySortOrder, orderBySortOrderDesc, moveBefore / moveAfter. |
HasTimestampColumns |
Datetime casts + optional soft deletes; override shouldUseSoftDeletes() to disable. |
HasSlugColumns |
Spatie HasSlug + slugColumns fillable; route key = slug. Override source/slug column methods. |
HasAuditColumns |
Fills audit IDs on create/update/delete when Auth::check(). Relationships need a resolvable user model (see config). |
HasMetaColumns |
Fillable + casts for meta_title, meta_description, meta_keywords (array), meta_image. Override column name methods if needed. |
Blueprint macros
Registered when eloquent-columns.register_macros is true:
| Macro | Signature |
|---|---|
activeColumn |
($name = 'is_active', $default = true) |
featuredColumn |
($name = 'is_featured', $default = false) |
sortOrderColumn |
($name = 'sort_order', $default = 0) |
slugColumns |
($main = 'name', $slug = 'slug') |
timestampColumns |
($withSoftDeletes = true) |
auditColumns |
($created = 'created_by', $updated = 'updated_by', $deleted = 'deleted_by', $useUlid = true) — set $useUlid to false for foreignId (bigint) columns. |
metaColumns |
($title = 'meta_title', $description = 'meta_description', $keywords = 'meta_keywords', $image = 'meta_image') |
Example migration
Schema::create('posts', function (Blueprint $table) { $table->id(); $table->slugColumns(); $table->activeColumn(); $table->featuredColumn(); $table->sortOrderColumn(); $table->timestampColumns(); $table->auditColumns(); $table->metaColumns(); });
Example model
use Banulakwin\EloquentColumns\Concerns\HasActiveColumn; use Banulakwin\EloquentColumns\Concerns\HasAuditColumns; use Banulakwin\EloquentColumns\Concerns\HasFeaturedColumn; use Banulakwin\EloquentColumns\Concerns\HasMetaColumns; use Banulakwin\EloquentColumns\Concerns\HasSlugColumns; use Banulakwin\EloquentColumns\Concerns\HasSortOrderColumn; use Banulakwin\EloquentColumns\Concerns\HasTimestampColumns; use Illuminate\Database\Eloquent\Model; class Post extends Model { use HasActiveColumn; use HasAuditColumns; use HasFeaturedColumn; use HasMetaColumns; use HasSlugColumns; use HasSortOrderColumn; use HasTimestampColumns; }
Testing
composer test # Run PHPUnit composer pint # Fix code style composer phpstan # Static analysis composer quality # Run all (pint + phpstan + test)
Changelog
See CHANGELOG.md for details.
Contributing
- Fork the repository
- Create your feature branch (
git checkout -b feature/your-feature) - Run
composer qualityto ensure tests and style pass - Commit and push
- Open a pull request
Package layout
config/eloquent-columns.php
src/Concerns/*.php
src/Macros/*.php
src/EloquentColumnsServiceProvider.php
tests/Unit/Concerns/*.php
tests/Unit/Macros/*.php
License
MIT — see LICENSE for details.