v1.1.0 2020-12-10 17:39 UTC

This package is auto-updated.

Last update: 2024-04-14 00:17:59 UTC


Build Status Scrutinizer Code Quality Code Coverage StyleCI Documentation

This package contains a trait to make Eloquent models publishable. It enables the model to hold a published vs non-published state, which comes in handy for things like blog posts that can be drafts or final (published) posts.

It uses a published_at attribute to determine the model state ie, if the model published_at is null, the model isn't published.


Install via Composer package manager:

composer require bmatovu/laravel-publishable


Add the publsihed_at column to your database table.


use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreatePostsTable extends Migration
    public function up()
        Schema::create('posts', function (Blueprint $table) {
            // ...

To make a model publishable, use the Bmatovu\Publishable\Publishable trait on the model:


namespace App\Models;

use Bmatovu\Publishable\Publishable;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
    use Publishable;

{tip} The Publishable trait will automatically cast the published_at attribute to a DateTime / Carbon instance for you.

Now, when you call the publish method on the model, the published_at column will be set to the current date and time.

Querying Publishable Models

When querying a model that is publishable, the unpublished models will automatically be excluded from all query results.

$publishedPosts = Post::get();

$publishedPosts = Post::onlyPublished()->get();

However, you may force unpublished models to appear in a result set using the withDrafts method on the query:

$posts = Posts::withDrafts()->get();

You may also retrieve only unpublished models using the onlyDrafts method.

$drafts = Posts::onlyDrafts()->get();

To determine if a given model instance has been published, use the isPublished method:

if ($post->isPublished()) {
    // ...

Publishing Models

You can save a model as published in your database like;

// Publishing a single model instance...

// Publishing all related models...

Unpublishing Models

You can "un-published" a published model like;