Download the PHP package oddvalue/laravel-drafts without Composer
On this page you can find all versions of the php package oddvalue/laravel-drafts. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Informations about the package laravel-drafts
A simple, drop-in drafts/revisions system for Laravel models
- Installation
- Usage
- Preparing your models
- Add the trait
- Relations
- Database
- The API
- Creating a new record
- Relations
- Interacting with records
- Published revision
- Current Revision
- Revisions
- Preview mode
- Middleware
- WithDraftsMiddleware
- Testing
- Changelog
- Contributing
- Security Vulnerabilities
- Credits
- License
Version compatibility
Laravel | Drafts |
---|---|
v9.x | v1.x |
v10.x | v1.x |
v11.x | v2.x |
Installation
You can install the package via composer:
You can publish the config file with:
This is the contents of the published config file:
Usage
Preparing your models
Add the trait
Add the HasDrafts
trait to your model
Relations
The package can handle basic relations to other models. When a draft is published HasOne
and HasMany
relations will be duplicated to the published model and BelongsToMany
and MorphToMany
relations will be synced to the published model. In order for this to happen you first need to set the $draftableRelations
property on the model.
Alternatively you may override the getDraftableRelations
method.
Database
The following database columns are required for the model to store drafts and revisions:
- is_current
- is_published
- published_at
- uuid
- publisher_type
- publisher_id
The names of these columns can be changed in the config file or per model using constants
e.g. To alter the name of the is_current
column then you would add a class constant called IS_CURRENT
There are two helper methods added to the schema builder for use in your migrations that will add/remove all these columns for you:
The API
The HasDrafts
trait will add a default scope that will only return published/live records.
The following query builder methods are available to alter this behavior:
withoutDrafts()
/published(bool $withoutDrafts = true)
Only select published records (default)withDrafts(bool $withDrafts = false)
Include draft recordonlyDrafts()
Select only drafts, exclude published
Creating a new record
By default, new records will be created as published. You can change this either by including 'is_published' => false
in the attributes of the model or by using the createDraft
or saveAsDraft
methods.
When saving/updating a record the published state will be maintained. If you want to save a draft of a published record then you can use the saveAsDraft
and updateAsDraft
methods.
This will create a draft record and the original record will be left unchanged.
# | title | uuid | published_at | is_published | is_current | created_at | updated_at |
---|---|---|---|---|---|---|---|
1 | Foo | 9188eb5b-cc42-47e9-aec3-d396666b4e80 | 2000-01-01 00:00:00 | 1 | 0 | 2000-01-01 00:00:00 | 2000-01-01 00:00:00 |
2 | Bar | 9188eb5b-cc42-47e9-aec3-d396666b4e80 | 2000-01-02 00:00:00 | 0 | 1 | 2000-01-02 00:00:00 | 2000-01-02 00:00:00 |
Interacting with records
Published revision
The published revision if the live version of the record and will be the one that is displayed to the public. The default behavior is to only show the published revision.
Current Revision
Every record will have a current revision. That is the most recent revision and what you would want to display in your admin.
To fetch the current revision you can call the current
scope.
Revisions
Every time a record is updated a new row/revision will be inserted. The default number of revisions kept is 10, this can be updated in the published config file.
You can fetch the revisions of a record by calling the revisions
method.
Deleting a record will also delete all of its revisions. Soft deleting records will soft delete the revisions and restoring records will restore the revisions.
If you need to update a record without creating revision
Preview Mode
Enabling preview mode will disable the global scope that fetches only published records and will instead fetch the current revision regardless of published state.
Middleware
WithDraftsMiddleware
If you require a specific route to be able to access drafts then you can use the WithDraftsMiddleware
middleware.
There is also a helper method on the router that allows you to create a group with that middleware applied.
Testing
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
- jim
- All Contributors
License
The MIT License (MIT). Please see License File for more information.
All versions of laravel-drafts with dependencies
illuminate/contracts Version ^11.0
spatie/laravel-package-tools Version ^1.9.2