Skip to content
Icon

WARNING You're browsing the documentation for an upcoming version of Laravel Auditable. The documentation and features of this release are subject to change.

Auditable Trait

Using AuditableTrait on your model provides the following API for accessing audit information.

Boot

The trait automatically registers an observer when your model is booted:

public static function bootAuditableTrait(): void

This method is called automatically when the trait is used on a model and sets up the AuditableTraitObserver to handle audit field updates.

Creator

Get the instance of the user who created the record:

public function creator(): BelongsTo

Example:

$post = Post::first();
$creator = $post->creator;
 
echo $creator->name; // "John Doe"

Updater

Get the instance of the user who last updated the record:

public function updater(): BelongsTo

Example:

$post = Post::first();
$updater = $post->updater;
 
echo $updater->name; // "Jane Smith"

deleter

Get the instance of the user who deleted the record. This requires using AuditableWithDeletesTrait instead:

public function deleter(): BelongsTo

Example:

$post = Post::withTrashed()->first();
$deleter = $post->deleter;
 
echo $deleter->name; // "Admin User"

::: tip Related Documentation For tracking who deleted records, see Soft Deletes Auditable for setup and usage instructions. :::

createdByName Attribute

Get the full name of the user who created the record:

public function getCreatedByNameAttribute(): string

Example:

$post = Post::first();
echo $post->created_by_name; // "John Doe"

updatedByName Attribute

Get the full name of the user who last updated the record:

public function getUpdatedByNameAttribute(): string

Example:

$post = Post::first();
echo $post->updated_by_name; // "Jane Smith"

deletedByName Attribute

Get the full name of the user who deleted the record. This requires AuditableWithDeletesTrait:

public function getDeletedByNameAttribute(): string

Example:

$post = Post::withTrashed()->first();
echo $post->deleted_by_name; // "Admin User"

scopeOwned

A query scope that limits results to records owned by the current authenticated user. This filters records where created_by matches the current user's ID:

public function scopeOwned(Builder $query): Builder

Example:

auth()->loginUsingId(1);
 
$posts = Post::owned()->get();
 
// Equivalent SQL:
// SELECT * FROM posts WHERE posts.created_by = 1

::: tip When to Use scopeOwned Use this scope to implement record ownership, filtering queries to show only records created by the authenticated user. :::

getQualifiedUserIdColumn

Get the fully qualified column name for the created_by field:

public function getQualifiedUserIdColumn(): string

Example:

$post = new Post();
echo $post->getQualifiedUserIdColumn(); // "posts.created_by"
// or "posts.author_id" if CREATED_BY constant is defined

getUserInstance

Get an instance of the configured user class:

public function getUserInstance(): Model

Example:

$post = new Post();
$user = $post->getUserInstance();
// Returns a new instance of the configured user model

getUserClass

Get the user class name, respecting any auditUser property override:

protected function getUserClass(): string

Example:

$post = new Post();
echo $post->getUserClass(); // "App\Models\User"
// or "App\Models\Admin" if $auditUser is set

getCreatedByColumn

Get the column name for the created by field:

public function getCreatedByColumn(): string

Example:

$post = new Post();
echo $post->getCreatedByColumn(); // "created_by"
// or "author_id" if CREATED_BY constant is defined

getUpdatedByColumn

Get the column name for the updated by field:

public function getUpdatedByColumn(): string

Example:

$post = new Post();
echo $post->getUpdatedByColumn(); // "updated_by"
// or "last_editor_id" if UPDATED_BY constant is defined

getDeletedByColumn

Get the column name for the deleted by field. This requires AuditableWithDeletesTrait:

public function getDeletedByColumn(): string

Example:

$post = new Post();
echo $post->getDeletedByColumn(); // "deleted_by"