Laravel - Actualizar sólo campos vacíos en un modelo

Laravel - Actualizar sólo campos vacíos en un modelo

Estaba trabajando con Laravel y me encontré en la necesidad de actualizar solamente los campos vacíos en un modelo existente o crearlo si no existía. Existe el método updateOrCreate pero no brinda ninguna ayuda para actualizar únicamente los campos que no estén llenos, sino todos los campos declarados, incluso si ya tienen valores.

Lo pude realizar para un modelo, pero después tuve la necesidad de usarlo en muchos más, entonces pensé: ¿Cuál sería la manera de replicarlo en los modelos que necesite?. La solución era hacer un Trait

Este trait toma los mismos parámetros que la función updateOrCreate hacienda una query al modelo y los valores necesarios para crearlo/actualizarlo. A continuación el código para replicarlo en tu proyecto.

<?php
namespace App\Traits;
trait SecureUpdatable
{
/** @method static $this updateBlankOrCreate($hashedId, array $columns = []) */
/**
* @param $attributes
* @param $values
* @return \Illuminate\Database\Eloquent\Model|$this
*/
public static function updateBlankOrCreate($attributes, $values)
{
/** @var \Illuminate\Database\Eloquent\Model $model */
$model = static::firstOrNew($attributes);
$blankValues = collect($values)->filter(function ($fieldValue, $fieldName) use ($model) {
/** @var \Illuminate\Database\Eloquent\Model $model */
return blank($model->getAttribute($fieldName));
})->toArray();
$model->fill($blankValues)->save();
return $model;
}
}

Con esto, necesitas ir a tu modelo Eloquent e incluirlo con la línea de código use SecureUpdatable. Además, tendrás autocompletado en tu editor de código.

¿Cómo funciona?

Como puedes ver, trata de encontrar si el modelo existe o crea una nueva instancia usando la función firstOrNew, después itera todos los campos existentes en la tabla en búsqueda de los que tengan un null como valor y los reemplaza

Mis posts no son generados por la IA, sin embargo, podrían estar corregidos por ella. El primer borrador siempre es de mi creación

Tags

Autor

Escrito por Helmer Davila

En otros lenguajes

I was looking if there was a function to make a paginator for myself using Sequelize with Typescript. I found a lot of tutorials that teach you how to calculate the offset and the number of pages.

Laravel - Update only blank/empty fields in models

En Laravel, vous avez la méthode updateOrCreate. J’ai développé une application et j’ai besoin de mise a jour seulement le blank  propriétés. La logique était la suivante si l’enregistrement n’existe pas, le code devrait le créer.

Laravel - Seulement mise à jour des champs vides d’un modèle

Posts relacionados

Usando el poder de Mockery

Laravel Facades y Mockery: Creando tests de métodos encadenados

Un problema entre Laravel Dusk y la versión de tu navegador

Cómo resolver "500 session error" en Laravel Dusk