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

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

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

Donc, j’ai pensé, si j’ai besoin de la même fonctionnalité dans les suivants models? La solution est arrivée instantanément, utilisez un Trait

Ce trait prendre les mêmes paramètres comment updateOrCreate , les attributs de filtration et les valeurs de remplissage. Je vais vous montrer le code.

<?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;
}
}

Avec ça, vous avez juste besoin d’inclure le trait dans votre modèle Laravel: use SecureUpdatable;. Aussi, vous aurez la complétion de code pour votre IDE.

Comment ça fonctionne?

Comme vous le voyez, essaie de trouver le modèle existant ou de créer une nouvelle instance avec la fonction statique firstOrNew. Filtrez ensuite uniquement les valeurs vides avec le blank helper de Laravel.

Mes articles ne sont pas generés par l'IA, cependant ils pourrait y être corrigés. Le premier brouillon est ma création originale

Tags

Auteur

Écrit par Helmer Davila

Dans d'autres langues

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

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.

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

Articles connexes

On utilise la puissance de Mockery

Laravel Facades et Mockery: faire de tests sur des méthodes enchaînées

C’est un problème entre Larave Dusk et la version du navigateur

Résoudre l’erreur 500 dans Laravel Dusk