Laravel Eloquent의 모델 정리 기능을 사용하면 데이터베이스에서 오래되었거나 원치 않는 레코드를 자동으로 삭제할 수 있습니다. 이는 대규모 데이터베이스의 성능을 향상시키고 불필요한 데이터 축적을 방지하는 데 도움이 됩니다. Laravel에서는 예약된 작업이나 Artisan 명령을 통해 정리 작업을 수행할 수 있습니다.
이 방법은 특정 시간이 지난 후 오래된 기록을 삭제해야 할 때 사용할 수 있습니다. 예를 들어, 게시물이 작성된 지 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일 전 게시물이 삭제됩니다.
Artisan 명령을 사용하여 수동으로 트리밍 작업을 수행할 수도 있습니다. 새로운 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)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!