novius / laravel-publishable
A Laravel Eloquent model trait for publishable resource
Installs: 4 023
Dependents: 1
Suggesters: 0
Security: 0
Stars: 2
Watchers: 5
Forks: 0
Open Issues: 0
Requires
- php: >=8.2
- illuminate/database: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
Requires (Dev)
- laravel/pint: ^1.10
- orchestra/testbench: ^9.1
- pestphp/pest: ^2.34
- spatie/test-time: ^1.3
README
Introduction
A package for making Laravel Eloquent models "publishable" using 4 states : draft, published, unpublished and scheduled.
Manage an additional published_first_at
date for order by and display.
Requirements
- Laravel >= 10.0
- PHP >= 8.2
NOTE: These instructions are for Laravel >= 10.0 and PHP >= 8.2 If you are using prior version, please see the previous version's docs.
Installation
You can install the package via composer:
composer require novius/laravel-publishable
php artisan vendor:publish --provider="Novius\Publishable\LaravelPublishableServiceProvider" --tag=lang
Usage
Migrations
Schema::create('posts', function (Blueprint $table) { $table->id(); $table->string('title'); $table->text('text'); $table->timestamps(); $table->publishable(); // Macro provided by the package });
Eloquent Model Trait
namespace App\Models; use \Illuminate\Database\Eloquent\Model; use \Novius\LaravelPublishable\Publishable; class Post extends Model { use Publishable; ... }
Extensions
The extensions shipped with this trait include; notPublished
, published
, onlyDrafted
, onlyExpired
, onlyWillBePublished
and can be used accordingly:
$post = Post::first(); $post->isPublished(); $postsPublished = Post::all(); $postsPublished = Post::query()->published(); $onlyNotPublishedPosts = Post::query()->notPublished(); $onlyDraftedPosts = Post::query()->onlyDrafted(); $onlyExpiredPosts = Post::query()->onlyExpired(); $onlyWillBePublishedPosts = Post::query()->onlyWillBePublished();
When not specifing any additional scopes, all not published models are excluded from the query by default to prevent leaks of not published data.
Testing
composer run test
CS Fixer
Lint your code with Laravel Pint using:
composer run cs-fix
Licence
This package is under GNU Affero General Public License v3 or (at your option) any later version.