¿Cómo comprobar si un registro es nuevo en Laravel?

Resuelto Craig Ward asked hace 11 años • 6 respuestas

Recientemente comencé a usar Eloquent.

Cuando usé PHP Active Record, había una función interesante que verificaba si un registro se había cargado desde la base de datos o era una instancia nueva. ¿Hay algo similar en Eloquent que pueda usar?

Por nuevo me refiero a:

$article = new Article;

mientras que uno de la base de datos sería

$article = Article::find(1);
Craig Ward avatar Aug 29 '13 04:08 Craig Ward
Aceptado

Todos los modelos de laravel tienen una ->existspropiedad.

Más específicamente, si el modelo se carga desde la base de datos o se guarda en la base de datos desde su creación, la existspropiedad será verdadera; De lo contrario será falso.

Si desea saber si el modelo se ha modificado desde que se extrajo de la base de datos, o simplemente no se ha guardado (es decir, si es necesario guardarlo), puede utilizar la ->isDirty()función.

La API de Laravel es un lugar útil para este tipo de información: http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Model.html#method_isDirty y, a menudo, arroja mucha más luz que la documentación predeterminada.

Hailwood avatar Aug 28 '2013 22:08 Hailwood

Su objeto modelo tiene un atributo diseñado exactamente para eso. Fue creado recientemente:

$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
}

Para obtener más aclaraciones entre la forma en que funciona la variable existente y la variable wasRecentlyCreated (copiada del comentario de CJ Dennis a continuación)

 /* 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;

A diferencia de si un modelo se cargó desde una solicitud anterior:

/* Loading a Model */ 
$my_model = MyModel::first(); 
$my_model->exists === true; 
$my_model->wasRecentlyCreated === false;
Didier Sampaolo avatar Aug 12 '2017 13:08 Didier Sampaolo