Métodos de Laravel: firstOrNew, firstOrCreate, firstOr, y updateOrCreate
Victor Arana Flores
14 Aug 2022
Si has estado trabajando con Laravel durante algún tiempo, probablemente conozcas los métodos estándar para crear Modelos Eloquent como make(), create(), update y save(). Laravel incluye algunos otros métodos que también son realmente útiles para crear y actualizar Modelos que creo que no reciben suficiente atención. Así que en este artículo, me gustaría repasar algunos de estos métodos adicionales y explicar cómo pueden ser útiles.
firstOrNew
El método firstOrNew
es realmente útil para encontrar el primer Modelo que coincida con algunas restricciones o para hacer uno nuevo si no hay ninguno que coincida con esas restricciones.
Puedes tomar un trozo de código que se parezca a esto:
$user = User::where('email', request('email'))->first();
if ($user === null) {
$user = new User(['email' => request('email')]);
}
$user->name = request('name');
$user->save()
Y convertirlo en esto:
$user = User::firstOrNew(['email' => request('email')]);
$user->name = request('name');
$user->save()
También puede pasar una matriz de atributos adicionales para establecer como segundo parámetro si no se encuentra ningún Modelo existente:
$user = User::firstOrNew(
['email' => request('email')],
['name' => request('name')]
);
$user->save();
firstOrCreate
El método firstOrCreate
es muy similar al método firstOrNew. Intenta encontrar un modelo que coincida con los atributos que se pasan en el primer parámetro. Si no se encuentra un modelo, crea y guarda automáticamente un nuevo modelo después de aplicar los atributos pasados en el segundo parámetro:
$user = User::firstOrCreate(
['email' => request('email')],
['name' => request('name')]
);
// No es necesario llamar a $user->save()
firstOr
Recientemente encontré el método firstOr
mientras buceaba en la fuente. El método firstOr
recupera el primer Modelo de una consulta, o si no se encuentra ningún Modelo que coincida, llamará a un callback pasado. Esto puede ser realmente útil si necesitas realizar pasos adicionales al crear un usuario o quieres hacer algo más que crear un nuevo usuario:
$user = User::where('email', request('email'))->firstOr(function () {
$account = Account::create([ //... ]);
return User::create([
'account_id' => $account->id,
'email' => request('email'),
]);
});
updateOrCreate
El método updateOrCreate
intenta encontrar un Modelo que coincida con las restricciones pasadas como primer parámetro. Si se encuentra un modelo que coincida, se actualizará la coincidencia con los atributos pasados como segundo parámetro. Si no se encuentra un modelo que coincida, se creará un nuevo modelo con las restricciones pasadas como primer parámetro y los atributos pasados como segundo parámetro.
Puede refactorizar este fragmento de código:
$user = User::where('email', request('email'))->first();
if ($user !== null) {
$user->update(['name' => request('name')]);
} else {
$user = User::create([
'email' => request('email'),
'name' => request('name'),
]);
}
// Hacer otras cosas con el usuario
Para ello se utiliza el método updateOrCreate
:
$user = User::updateOrCreate(
['email' => request('email')],
['name' => request('name')]
);
// Hacer otras cosas con el usuario
Conclusión
¡En general, creo que estos métodos pueden ayudar a limpiar su código en ciertas circunstancias y son grandes opciones para tener en su cinturón de herramientas! Hazme saber si conoces algún otro que sea realmente útil y no sea muy conocido. Me encanta aprender sobre estos pequeños detalles que hacen que sea tan agradable trabajar con Laravel.
Traducido del blog de Laravel New
1 comentarios
Inicia sesión para comentar
Comentarios:
-
Walter Ramos hace 2 años
Totalmente, me quedo con el final de post, “Me encanta aprender sobre estos pequeños detalles que hacen que sea tan agradable trabajar con Laravel”. Excelente post Victor!