¿Cómo comprobar si un registro es nuevo en Laravel?
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);
Todos los modelos de laravel tienen una ->exists
propiedad.
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 exists
propiedad 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.
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;