인터넷 애플리케이션의 지속적인 발전과 함께 웹 개발 프레임워크도 끝없이 등장하고 있습니다. 그 중 Laravel은 가장 널리 사용되는 PHP 개발 프레임워크 중 하나이며 사회 각계각층에서 널리 사용되고 있습니다. 이번 글에서는 Laravel에 자동 데이터 삭제 기능을 추가하는 방법을 소개하겠습니다.
1. 문제 배경
웹 애플리케이션을 개발할 때 공간을 확보하고 시스템 효율성을 향상시키기 위해 정기적으로 쓸모 없는 데이터를 삭제해야 할 수도 있습니다. 예를 들어, 특정 기간 이후에 사용자 등록은 했지만 활성화되지 않은 계정을 삭제해야 하거나 일부 만료된 세션 정보 등을 삭제해야 합니다.
데이터를 정기적으로 삭제해야 하는 경우 특정 시점에 데이터 삭제 작업을 수행하도록 예약된 작업을 수동으로 작성할 수 있습니다. 그러나 예약된 작업을 수동으로 작성하는 데에는 다음과 같은 문제가 있습니다.
- 시간 관리가 불편하고 삭제 작업을 가끔씩 수동으로 수행해야 합니다.
- 오류가 발생하기 쉽습니다. 특히 여러 관련 테이블을 동시에 삭제해야 하는 경우 수동 실행으로 인해 논리적 오류가 발생하기 쉽습니다.
이를 위해 데이터 삭제 프로세스를 단순화하고 오류 가능성을 줄이기 위해 데이터를 자동으로 삭제하는 메커니즘을 개발해야 합니다.
2. Laravel의 자동 삭제 메커니즘
Laravel에서는 Eloquent ORM이 제공하는 "소프트 삭제" 메커니즘을 통해 데이터를 자동으로 삭제하는 효과를 얻을 수 있습니다. 소프트 삭제는 데이터베이스에서 데이터 행을 삭제할 때 이를 직접 삭제하지 않고 데이터 행의 delete_at 필드를 비어 있지 않은 타임스탬프 값으로 설정하는 것을 의미합니다.
Laravel 모델의 소프트 삭제 메커니즘을 사용하면 다음 기능을 수행할 수 있습니다.
- 레코드를 삭제하기 위해 delete() 메서드를 호출하면 레코드의 delete_at 필드에 자동으로 타임스탬프 값이 할당됩니다.
restore() 메서드를 호출하여 레코드를 복원하면 레코드의 원래 delete_at 필드 값이 지워집니다. - 레코드를 영구적으로 삭제하기 위해 forceDelete() 메서드를 호출하면 레코드의 delete_at 필드 값이 지워집니다. 작동하지 않습니다.
-
소프트 삭제 메커니즘은 역사적으로 삭제된 데이터를 쉽게 복원할 수 있으므로 데이터베이스의 무결성에 영향을 주지 않고 삭제된 기록을 효과적으로 숨길 수 있음을 알 수 있습니다.
3. 데이터 자동 삭제 단계
Laravel에서는 Artisan 명령을 사용하여 정기적으로 데이터를 삭제할 수 있습니다. 구체적인 구현 방법은 다음과 같습니다.
콘솔 명령 클래스 만들기 -
먼저 appConsoleCommands 디렉터리에 명령 클래스를 만들고 IlluminateConsoleCommand 클래스를 상속합니다. 개발 과정에서 필요에 따라 이 클래스를 수정하고 확장할 수 있습니다.
데이터를 자동으로 삭제하는 메소드 작성-
CustomDeleteCommand 클래스에서 delete()라는 메소드를 작성하고 자동으로 삭제해야 하는 데이터의 로직을 구현해야 합니다. 예:
/**
* Execute the console command.
*
* @return void
*/
public function handle()
{
$now = now(); //当前时间
$expiredTime = $now->subDay(7); //过期时间为一周前
//删除users表中deleted_at字段大于$expiredTime的记录
DB::table('users')
->where('deleted_at', '<', $expiredTime)
->delete();
//删除posts表及其关联的comments表中deleted_at字段大于$expiredTime的记录
Post::whereHas('comments', function ($query) use ($expiredTime) {
$query->where('deleted_at', '<', $expiredTime);
})->where('deleted_at', '<', $expiredTime)->delete();
}
로그인 후 복사
위 코드에서는 만료 시간 $expiredTime을 정의한 다음 Laravel의 DB와 Eloquent ORM을 사용하여 users 및 post 테이블에서 일치하는 레코드를 삭제합니다.
Eloquent ORM의 whereHas() 메소드를 사용하여 게시물 테이블 및 관련 댓글 테이블에서 자격을 갖춘 레코드를 삭제했다는 점에 유의해야 합니다.
데이터 자동 삭제 명령어 등록-
마지막으로 CustomDeleteCommand 명령어를 Artisan의 명령어 목록에 등록해야 터미널에서 해당 명령어를 실행할 수 있습니다.
appConsoleKernel.php 파일의 Schedule 메소드에 이 명령을 등록할 수 있습니다. 예:
protected function schedule(Schedule $schedule)
{
$schedule->command('delete:data')->daily();
}
로그인 후 복사
위 코드는 매일 CustomDeleteCommand를 자동으로 실행하는 기능을 구현합니다. 또한 필요에 따라 이 방법을 수정하여 맞춤형 예약 데이터 삭제 기능을 구현할 수도 있습니다.
4. 요약
라라벨에서 데이터를 자동으로 삭제하는 방법을 소개하는 글입니다. Eloquent ORM의 소프트 삭제 메커니즘을 사용하면 특정 시간 범위 내에서 쓸모 없는 데이터를 자동으로 쉽게 삭제할 수 있으므로 데이터를 수동으로 삭제해야 하는 부담이 줄어들고 웹 애플리케이션의 효율성이 향상됩니다.
실제 개발에서는 다양한 비즈니스 요구 사항을 충족하기 위해 필요에 따라 이 방법을 변경하고 확장할 수 있습니다. 이 글이 Laravel 개발자들에게 도움이 되기를 바랍니다.
위 내용은 laravel에 자동 데이터 삭제 기능을 추가하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!