fish / eloquent-logger
Log Eloquent model changes to a designated logs table
Installs: 13 913
Dependents: 0
Suggesters: 0
Security: 0
Stars: 8
Watchers: 2
Forks: 3
Open Issues: 2
Requires
- php: >=5.4.0
- illuminate/support: ^4.2|^5.0
Requires (Dev)
- fish/eloquent-cascade: ^1.0
- illuminate/auth: ^4.2|^5.0
- illuminate/config: ^4.2|^5.0
- illuminate/database: ^4.2|^5.0
- orchestra/testbench: ^3.2
- phpunit/phpunit: ^5.1
README
This Laravel 5 package adds logging functionality to Eloquent models. All changes (create, update, delete) will be recorded in a designated logs table. Updates will record only dirty fields.
Installation
Add to composer.json
:
"require": {
"fish/eloquent-logger": "^1.0"
}
Update Composer from the Terminal:
composer update
Add the service provider to the the list of providers in your app.php
Fish\Logger\LoggerServiceProvider
Publish migration:
php artisan logger:init
Run migration:
php artisan migrate
Usage
Use the trait on relevant models. E.g:
namespace App;
use Illuminate\Database\Eloquent\Model;
use Fish\Logger\Logger;
class Post extends Model
{
use Logger;
}
Retrieving logs for a model:
Post::find(1)->logs
Retrieving model from log (if the action was not deleted
):
Fish\Logger\Log::find(1)->loggable;
Retrieve the state of the model at a certain point of time:
Post::find(1)->logs()->stateOn('2015-02-02 13:00:00');
To retrieve the state of a deleted model:
Fish\Logger\Log::entity(Post::class, 1)->stateOn('2016-01-01 12:00:00');
The model will be retrieved even if the passed timestamp occured after it was already deleted.
The Log contains the following properties:
user_id
integer
: User who did the action. if there is no authenticated user, set tonull
action
string
: type of action -created
,updated
ordeleted
before
array
: state of the model before the action. If the action iscreated
set tonull
after
array
: state of the model after the action. If the action isdeleted
set tonull
created_at
datetime
: action's timestamp
Query helpers
wasCreated
,wasUpdated
orwasDeleted
- filter by action.between
- filter by date range.
Example:
Post::find(1)->logs()
->wasUpdated()
->between('2015-01-01','2015-02-01')
->get();