Métodos firstOrNew, firstOrCreate, firstOr y updateOrCreate de Laravel
- Publicado el 02 agosto, 2024
- Palabras: 417
Si has estado trabajando con Laravel durante algún tiempo, probablemente conozca los métodos estándar para crear modelos Eloquent como make(), create(), update y save(). Laravel incluye otros métodos que también son muy útiles para crear y actualizar modelos y que, en mi opinión, no reciben la suficiente atención. Por eso, en este artículo, me gustaría repasar algunos de estos métodos adicionales y explicar cómo pueden resultar útiles.
#firstOrNew
El método firstOrNew es realmente útil para encontrar el primer modelo que cumple con algunas restricciones o para crear uno nuevo si no hay ninguno que cumpla con esas restricciones.
Puedes tomar un fragmento de código que se vea así:
$user = User::where('email', request('email'))->first();
if ($user === null) {
$user = new User(['email' => request('email')]);
}
$user->name = request('name');
$user->save()
Y se convierte en:
$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, se 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
El método firstOr recupera el primer modelo de una consulta o, si no se encuentra ningún modelo coincidente, llamará a una devolución de llamada pasada. Esto puede ser muy útil si necesita realizar pasos adicionales al crear un usuario o desea 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 coincidente, se actualizará la coincidencia con los atributos pasados como segundo parámetro. Si no se encuentra ningún modelo coincidente, 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'),
]);
}
Para ello se utiliza el método updateOrCreate:
$user = User::updateOrCreate(
['email' => request('email')],
['name' => request('name')]
);
#Conclusión
En general, creo que estos métodos pueden ayudar a limpiar el código en determinadas circunstancias y son excelentes opciones para tener en el arsenal.
Antonio Jenaro
Web Developer
Fuente: Laravel news
Inicia la conversación
Hazte miembro de Antonio Jenaro para comenzar a comentar.
Regístrate ahora¿Ya estás registrado? Inicia sesión