bmatovu / laravel-publishable
Laravel publisable.
Requires
- php: >=7.0.0
- illuminate/database: ^5.5|^6.0|^7.0|^8.0
Requires (Dev)
- fzaninotto/faker: ~1.4
- illuminate/queue: ^5.5|^6.0|^7.0|^8.0
- illuminate/support: ^5.5|^6.0|^7.0|^8.0
- orchestra/testbench: ^3.5|^4.0|^5.0|^6.0
- phpunit/phpunit: ^6.0|^7.0|^8.0|^9.0
This package is auto-updated.
Last update: 2024-11-14 01:49:44 UTC
README
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.
Installation
Install via Composer package manager:
composer require bmatovu/laravel-publishable
Usage
Add the publsihed_at
column to your database table.
<?php 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) { // ... $table->timestamp('published_at')->nullable(); }); } }
To make a model publishable, use the Bmatovu\Publishable\Publishable
trait on the model:
<?php 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 thepublished_at
attribute to aDateTime
/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... $post->publish(); // Publishing all related models... $post->inLifeStyle()->publish();
Unpublishing Models
You can "un-published" a published model like;
$post->unpublish();