published_first_at for chronological sorting, which is ideal for content-heavy applications (e.g., blogs, marketing sites, news platforms). This reduces custom query logic and ensures consistency across models.publishable() migration macro simplifies schema changes.published(), draft(), scheduled()) reduce boilerplate and improve readability. However, the removal of the global scope (forcing all queries to return only published records) may require adjustments in existing codebases.published_first_at field enables efficient sorting but requires proper indexing to avoid performance bottlenecks in large datasets.publishable() macro adds five columns (status, published_at, published_first_at, scheduled_at, unpublished_at), which is minimal compared to custom implementations.laravel-nova-publishable, the core functionality is Nova-independent, making it usable in vanilla Laravel or other frontend frameworks (e.g., Livewire, Inertia).SoftDeletes, but explicit handling is needed to avoid edge cases (e.g., unpublished + deleted records).scheduled_at relies on Laravel’s config('app.timezone'), which may not align with user-specific timezones or global deployments.tags:clear or custom cache keys).scheduled_at and published_first_at be managed across multiple timezones (e.g., editors in UTC vs. users in PST)?SoftDeletes? Can a record be both unpublished and soft-deleted? What is the intended behavior?published_first_at and state fields be backfilled without downtime or data corruption?status, published_at, published_first_at)? Are there query optimization considerations?spatie/laravel-activitylog)? If not, how will this be implemented?Post, Article, Product).Post) to test:
publishable() macro).Model::published()->latest()).PostService::publish()).Article, PressRelease).?status=published).publishable() macro in migrations.$table->string('status')->default('draft'); // draft|published|unpublished|scheduled
$table->timestamp('published_first_at')->nullable();
$table->timestamp('published_at')->nullable();
$table->timestamp('scheduled_at')->nullable();
$table->timestamp('unpublished_at')->nullable();
published_first_at (e.g., created_at for existing published records).?status=published).laravel-nova-publishable, the core functionality is Nova-independent. Nova integration would require additionalHow can I help you explore Laravel packages today?