How to check if a record is new in Laravel?

Solution 1:

All laravel models have a ->exists property.

More specifically if the model is either loaded from the database, or has been saved to the database since being created the exists property will be true; Otherwise it will be false.

If you wish to know if the model has been modified since being grabbed from the database, or simply not saved at all (aka if it needs saving) then you can use the ->isDirty() function.

The Laravel API is a useful place for this kind of information: http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Model.html#method_isDirty and often sheds far more light than the default documentation.

Solution 2:

Your model object has an attribute exactly designed for that. It's wasRecentlyCreated :

$item = Item::firstOrCreate(['title' => 'Example Item']);

if ($item->wasRecentlyCreated === true) {
    // item wasn't found and have been created in the database
} else {
    // item was found and returned from the database
}

For more clarification between the way exists variable works vs wasRecentlyCreated variable (copied from the comment by CJ Dennis below)

 /* Creating a model */ 
 $my_model = new MyModel; 
 $my_model->exists === false; 
 $my_model->wasRecentlyCreated === false; 
 $my_model->save(); 
 $my_model->exists === true; 
 $my_model->wasRecentlyCreated === true;

As opposed to if a model was loaded from a previous request:

/* Loading a Model */ 
$my_model = MyModel::first(); 
$my_model->exists === true; 
$my_model->wasRecentlyCreated === false;