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

Articles connexes

On utilise la puissance de Mockery

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

En utilisant une astuce simple de Javascript

Laravel Livewire: Recharger la page après d’un événement et quelques secondes