novius / laravel-publishable
A Laravel Eloquent model trait for publishable resource
Installs: 6 354
Dependents: 1
Suggesters: 0
Security: 0
Stars: 2
Watchers: 4
Forks: 0
Open Issues: 0
Requires
- php: >=8.2
- laravel/framework: ^10.0|^11.0|^12.0
Requires (Dev)
- larastan/larastan: ^3.1
- laravel/pint: ^1.10
- orchestra/testbench: ^9.1
- pestphp/pest: ^2.34|^v3.7.4
- 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();
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.