X

Comment ajouter des suppressions réversibles à chaque modèle/migration par défaut ?


Je suis un grand fan de l’utilisation de la fonctionnalité Soft Delete pour à peu près tous les modèles Eloquent. Au cas où. Trop souvent, des clients m’ont demandé de restaurer les informations “supprimées”. Alors, comment automatiser un peu ce processus ?

Généralement, comment ajouter des suppressions logicielles ? En ajoutant un trait dans le modèle :

use Illuminate\Database\Eloquent\SoftDeletes;

 

class Task extends Model

{

use SoftDeletes;

}

Aussi, nous devons ajouter le deleted_at à la migration :

Schema::create('tasks', function (Blueprint $table) {

$table->id();

// ... other fields

$table->timestamps();

$table->softDeletes(); // THIS ONE

});

Maintenant, comment pouvons-nous nous assurer que chaque fois que nous courons php artisan make:model et php artisan make:migrationles nouveaux fichiers contiendraient ces modifications ?

Nous pouvons personnaliser les fichiers dits Stub par défaut qui sont à la base de ce qui est généré.

Exécutez cette commande artisanale :

php artisan stub:publish

Il copierait les fichiers du /vendor dossier dans le nouveau dossier appelé /stubs. Parmi ces dossiers, nous nous intéressons à tout ce qui concerne les Modèles et les Migrations.

stubs/migration.create.stub:

// ... other code

 

public function up()

{

Schema::create('{{ table }}', function (Blueprint $table) {

$table->id();

$table->timestamps();

});

}

Donc, tout ce que nous avons à faire est d’ajouter la troisième ligne ici :

public function up()

{

Schema::create('{{ table }}', function (Blueprint $table) {

$table->id();

$table->timestamps();

$table->softDeletes();

});

}

Même chose avec le fichier stub du modèle.

talons/modèle.stub:

namespace {{ namespace }};

 

use Illuminate\Database\Eloquent\Factories\HasFactory;

use Illuminate\Database\Eloquent\Model;

 

class {{ class }} extends Model

{

use HasFactory;

}

Après avoir ajouté les SoftDeletes :

namespace {{ namespace }};

 

use Illuminate\Database\Eloquent\Factories\HasFactory;

use Illuminate\Database\Eloquent\Model;

use Illuminate\Database\Eloquent\SoftDeletes;

 

class {{ class }} extends Model

{

use HasFactory, SoftDeletes;

}

Et c’est tout : maintenant essaie de courir php artisan make:model SomeModel -m et profitez du modèle/de la migration avec Soft Delete.