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.
- 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.
You can install the package via composer:
composer require novius/laravel-publishable
php artisan vendor:publish --provider="Novius\Publishable\LaravelPublishableServiceProvider" --tag=lang
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('text');
$table->timestamps();
$table->publishable(); // Macro provided by the package
});
namespace App\Models;
use \Illuminate\Database\Eloquent\Model;
use \Novius\LaravelPublishable\Publishable;
class Post extends Model {
use Publishable;
...
}
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.
composer run test
Lint your code with Laravel Pint using:
composer run cs-fix
This package is under GNU Affero General Public License v3 or (at your option) any later version.