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:migration
les 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.