With all the features that are out-of-the-box available in Laravel it is hard to know them all. Some features are not even properly documented. In this article I will be giving you ten Eloquent features that you might not know about.

1. Custom timestamp column names

By default Laravel models have a created_at and an updated_at timestamp. You can overwrite these column names by defining a constant variable in your model. If your model uses soft deletes you can overwrite the deleted_at column name aswell.

class User extends Model
{
    const CREATED_AT = 'created';
    const UPDATED_AT = 'last_update';
    const DELETED_AT = 'removed';
}

2. The exists property

The exists property tells whether the object exists in the database or not. When you create a new model instance the exists property will be set to false. Once your model is saved or retrieved from the database the exists property will be set to true.

$user = new User;
$user->name = 'George';
$user->email = '[email protected]';
$user->password = 'secret';
$user->exists; // false
$user->save();
$user->exists; // true

3. Dirty

To check if a model has been edited since it was retrieved from the database you can use the isDirty method. It is good to know that when a model isn't saved at all the isDirty method will return true. This method has an optional parameter that makes it able to check if a specific property is dirty.

You can use the getDirty method to get an array of all the propterties that are dirty on a model instance.

$user = User::first();
$user->isDirty(); // false
$user->name = 'James';
$user->isDirty(); // true
$user->isDirty('email'); // false
$user->isDirty('name'); // true
$user->getDirty(); // ["name" => "James"]

4. Original

Getting a model's original attribute values can be done by using the getOriginal method. This method has an optional parameter that makes it able to get the original value of a specific property.

$user = User::first();
$user->name = 'James';

$user->getOriginal(); // Array with "name" => "George"
$user->getOriginal('name'); // "George"

5. Cloning a model

Cloning a model is a piece of cake. It can be done by calling the replicate method on your model instance.

$user = User::first();
$clonedUser = $user->replicate();

6. Convert a model or collection to array

The toArray can convert a model or collection to a plain PHP array.

// Convert a model instance to an array
$user = User::first();
$user->toArray();
// Convert a collection to an array
$users = User::all();
$users->toArray();

7. Refresh

The refresh method will refresh the model by getting fresh data from the database. All of its loaded relationships will be refreshed aswell.

$user= User::where('name', 'George')->first();
$user->name= 'James';
$user->address->city = "New York";
$user->refresh();
$user->name; // "George"
$user->address->city; // "Washington"

8. Without events

Sometimes you want to create or update a model without firing any events. In Laravel it is possible to execute a callback without firing any model events for any model type.

$user = User::withoutEvents(function () {
    return factory(User::class)->create(); 
});

9. Push

The push method saves the model and all of its relationships.

$user = User::where('name', 'George')->first();
$user->age = 42;
$user->address->city = "New York"; 

If you just call the save method on the user the address won't be saved.

$user->save();

By using the push method both the user and the address will be saved.

$user->push();

10. Force a delete on a soft delete model

In some situations you want to remove a soft deleted model from your database. This can be done by using the forceDelete method.

$user = User::first();
$user->forceDelete();

These are the ten Eloquent features that I wanted to share with you. Please share your thoughts on this article. Make sure to check out my other posts as well. A lot of my content is about Laravel. Feel free to leave a comment if you have any feedback, questions or want me to write about another Laravel related topic.