A simple package for making Laravel Eloquent models 'publishable'. Not published models are excluded from queries by default but can be queried via extra scope.
This package allows easy publishing and unpublishing of models by combining scopes and macros.
The package provides a trait Publishable
for your Eloquent model.
Your database schema has to have a published_at
datetime column so that the trait can read and write it.
By reading this column the package can determine which models already have been published and provide the requested models.
You can install the package via composer:
composer require lambdadigamma/laravel-publishable
The Publishable
trait works similarly to Laravel's SoftDeletes
trait. This package provides a macro for Laravel's Migration Builder.
Just use the publishedAt
macro in your migration to get started:
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('text');
$table->timestamps();
$table->publishedAt(); // Macro provided by the package
});
After providing a published_at
timestamp on your model, you can use the Publishable
trait on your Eloquent model:
namespace App\Models;
use \Illuminate\Database\Eloquent\Model;
use \LaravelPublishable\Publishable;
class Post extends Model {
use Publishable;
...
}
The extensions shipped with this trait include; publish
, unpublish
, withNotPublished
, withoutPublished
, onlyPublished
and can be used accordingly:
$post = Post::first();
$post->publish();
$post->publishAt(now()->addHour(1));
$post->scheduleFor(new Carbon('2021-04-01 10:00:00'));
$post->unpublish();
$postsWithNotPublished = Post::query()->withNotPublished();
$onlyNotPublishedPosts = Post::query()->onlyNotPublished();
When not specifing any additional scopes, all not published models are excluded from the query by default (withoutNotPublished
) to prevent leaks of not published data.
composer test
Please see CHANGELOG for more information what has changed recently.
Please see CONTRIBUTING for details.
If you discover any security related issues, please email [email protected] instead of using the issue tracker.
The MIT License (MIT). Please see License File for more information.