ホームページ >データベース >mysql チュートリアル >Laravel Eloquent ORM in Bangla Part-Pruning Model)
Laravel Eloquent のモデルプルーニング機能を使用すると、データベース内の古いレコードや不要なレコードを自動的に削除できます。これは、大規模なデータベースのパフォーマンスを向上させ、不必要なデータの蓄積を防ぐのに役立ちます。 Laravel では、スケジュールされたタスクまたはアーティザン コマンドを通じてプルーニング操作を実行できます。
この方法は、特定の時間が経過した後に古いレコードを削除する必要がある場合に使用できます。たとえば、投稿を作成してから 30 日後に自動的に削除したい場合は、トリム機能を使用できます。
prune()
メソッドを使用します: Laravel Eloquent 8.x バージョンでは prune()
メソッドが導入されました。このメソッドは、特定の条件に基づいてレコードを削除するように設計されています。
<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>
Post::prune()
を実行するたびに、30 日経過した投稿が削除されます。
Laravel のタスクスケジュール機能を使用すると、古いデータを特定の時間に定期的に削除できます。
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>
これにより、毎日午前 1 時に 30 日前の投稿が削除されます。
アーティザン コマンドを使用してトリミング操作を手動で実行することもできます。新しい 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>
これは手動で実行され、30 日経過した投稿が削除されます。
場合によっては、論理的な削除を使用したい場合があります。これは、レコードを完全に削除するのではなく、単に「削除済み」としてマークすることを意味します。この場合、論理的な削除とトリム機能を組み合わせることができます。
<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>
これにより、30 日が経過した論理的に削除された投稿が削除されます。
レコードに関連するレコードを削除する場合は、それらの関係も同時に削除する必要があります。たとえば、投稿が削除されたときに、それに関連付けられているコメントも削除したい場合は、カスケード削除を使用できます。
<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>
これにより、投稿が削除されると、それに関連付けられたコメントも確実に削除されます。
以上がLaravel Eloquent ORM in Bangla Part-Pruning Model)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。