milebits / eloquent-draftable
Add draftable functionality to your eloquent models.
Requires
- illuminate/support: ^8|^9
- milebits/helpers: ^3.0
Requires (Dev)
README
Add draftable functionality to your eloquent models.
Installation
You can install this package via composer.
composer require milebits/eloquent-draftable
Setup
-
Add a nullable timestamp
published_at
column to your model's database table.$table->timestamp('published_at')->nullable();
-
Include the
Optix\Draftable\Draftable
trait in your model.class Post extends Model { use Draftable; }
Change the default published_at
column name
use Milebits\EloquentDraftable\Draftable; class Post extends Model { use Draftable; const PUBLISHED_AT_COLUMN = 'your_custom_column'; }
And then in your migration, change it with anything you want.
Usage
Query scopes
When the Draftable
trait is included in a model, a global scope will be registered to automatically exclude
draft records from query results. Therefore, in order to query draft records you must apply one of the local
scopes outlined below.
// Only retrieve published records... $onlyPublished = Post::all(); // Retrieve draft & published records... $withDrafts = Post::withDrafts()->get(); // Only retrieve draft records... $onlyDrafts = Post::onlyDrafts()->get();
Publish a model
$post = Post::withDrafts()->first(); // Publish without saving... $post->setPublished(true); // Publish and save... $post->publish(); // or $post->publish(true);
When you attempt to publish a model that's already been published, the published_at
timestamp will not be updated.
Draft a model
// Draft without saving... $post->setPublished(false); // Draft and save... $post->draft(); // or $post->publish(false);
Schedule a model to be published
$publishDate = now()->addWeek(); // $publishDate = '2020-01-01 00:00:00'; // $publishDate = '+1 week'; // Schedule without saving... $post->setPublishedAt($publishDate); // Schedule and save... $post->publishAt($publishDate);
The methods outlined above both require a $date
parameter of type Illuminate\Support\Carbon|string|null
.
Get the published status of a model
// Determine if the model is published... $post->isPublished(); // Determine if the model is draft... $post->isDraft();
License
This package is licensed under the Apache license 2.0.