Maison >base de données >tutoriel mysql >Laravel Eloquent ORM dans les modèles d'élagage partiel Bangla)
La fonction d'élagage de modèle de Laravel Eloquent vous permet de supprimer automatiquement les enregistrements obsolètes ou indésirables de votre base de données. Cela permet d'améliorer les performances des bases de données volumineuses et d'éviter une accumulation inutile de données. Dans Laravel, vous pouvez effectuer des opérations d'élagage via des tâches planifiées ou des commandes Artisan.
Cette méthode peut être utilisée lorsque d'anciens enregistrements doivent être supprimés après une heure précise. Par exemple, si vous souhaitez qu'une publication soit automatiquement supprimée 30 jours après sa création, vous pouvez utiliser la fonction de découpage.
prune()
: La version Laravel Eloquent 8.x a introduit la méthode prune()
. Cette méthode est conçue pour supprimer des enregistrements en fonction de conditions spécifiques.
<code class="language-php">use App\Models\Post; class Post extends Model { protected static function booted() { static::pruning(function ($query) { // 删除 30 天前创建的帖子 $query->where('created_at', '<', now()->subDays(30)); }); } }</code>
Chaque fois que vous exécutez Post::prune()
, les publications datant de 30 jours seront supprimées.
Vous pouvez utiliser la fonction de planification de tâches de Laravel pour supprimer régulièrement les anciennes données à un moment précis.
schedule()
. <code class="language-php">use App\Models\Post; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; class Kernel extends ConsoleKernel { protected function schedule(Schedule $schedule) { // 每天凌晨 1 点修剪旧帖子 $schedule->call(function () { Post::where('created_at', '<', now()->subDays(30))->delete(); })->dailyAt('01:00'); } }</code>
Cela supprimera les publications d'il y a 30 jours tous les jours à 1h du matin.
Vous pouvez également effectuer des opérations de découpage manuellement à l'aide des commandes Artisan. Supprimez les données en créant une nouvelle commande Laravel Artisan.
<code class="language-bash">php artisan make:command PruneOldPosts</code>
<code class="language-php">namespace App\Console\Commands; use Illuminate\Console\Command; use App\Models\Post; class PruneOldPosts extends Command { protected $signature = 'posts:prune-old'; protected $description = 'Prune posts older than 30 days'; public function handle() { // 删除 30 天前创建的帖子 Post::where('created_at', '<', now()->subDays(30))->delete(); $this->info('Old posts pruned successfully!'); } }</code>
<code class="language-bash">php artisan posts:prune-old</code>
Cela s'exécutera manuellement et supprimera les publications datant de 30 jours.
Parfois, vous souhaiterez peut-être utiliser la suppression logicielle, ce qui signifie ne pas supprimer complètement l'enregistrement, mais simplement le marquer comme "supprimé". Dans ce cas, vous pouvez combiner les fonctions de suppression logicielle et de découpage.
<code class="language-php">use App\Models\Post; class Post extends Model { use SoftDeletes; protected static function booted() { static::pruning(function ($query) { // 修剪 30 天前软删除的帖子 $query->where('deleted_at', '<', now()->subDays(30)); }); } }</code>
Cela supprimera les publications supprimées de manière logicielle datant de 30 jours.
Lorsque vous souhaitez supprimer des enregistrements liés à des enregistrements, vous devez supprimer ces relations en même temps. Par exemple, si vous souhaitez qu'en cas de suppression d'une publication, les commentaires associés soient également supprimés, vous pouvez utiliser la suppression en cascade.
<code class="language-php">class Post extends Model { use SoftDeletes; public function comments() { return $this->hasMany(Comment::class); } protected static function booted() { static::deleting(function ($post) { // 删除帖子时删除所有评论 $post->comments()->delete(); }); } }</code>
Cela garantira que lorsqu'une publication est supprimée, ses commentaires associés sont également supprimés.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!