>  기사  >  PHP 프레임워크  >  laravel에서 일시 삭제된 데이터를 계속 읽을 수 있는 방법에 대한 간략한 분석

laravel에서 일시 삭제된 데이터를 계속 읽을 수 있는 방법에 대한 간략한 분석

PHPz
PHPz원래의
2023-04-03 19:41:15512검색

Laravel은 웹 애플리케이션 개발 프로세스를 단순화하는 많은 강력한 기능과 도구를 제공하는 인기 있는 PHP 웹 애플리케이션 프레임워크입니다. 그중에서도 Laravel의 소프트 삭제 기능은 데이터베이스에서 레코드를 즉시 삭제하는 대신 레코드를 삭제된 것으로 표시하여 데이터 무결성을 유지하면서 몇 가지 특별한 요구 사항을 충족할 수 있는 매우 유용한 기능입니다.

그러나 많은 Laravel 개발자가 직면할 수 있는 질문은 일시 삭제된 데이터를 계속 읽을 수 있느냐는 것입니다. 이번 글에서는 이 문제와 해결 방법을 살펴보겠습니다.

먼저 Laravel의 소프트 삭제 원리를 이해해야 합니다. 소프트 삭제는 데이터 테이블에 delete_at 필드를 추가하여 구현됩니다. 소프트 삭제를 사용할 때, 레코드가 삭제되면 라라벨은 레코드를 삭제하는 대신 레코드의 delete_at 필드를 비어 있지 않은 값으로 설정하여 "소프트 삭제" 효과를 얻습니다. 데이터를 쿼리할 때 Laravel은 비어 있지 않은 delete_at 필드가 있는 레코드를 자동으로 필터링하여 "소프트 삭제"되지 않은 레코드만 쿼리하는 효과를 얻습니다.

따라서 일시 삭제된 레코드가 데이터베이스에 아직 존재하더라도 일시 삭제된 데이터를 계속 읽을 수 있습니다. 그러나 기본적으로 Laravel의 일시 삭제는 "일시 삭제"로 표시된 레코드만 자동으로 필터링합니다. 일시 삭제된 레코드와 삭제되지 않은 레코드를 모두 쿼리해야 하는 경우 withTrashed 메서드를 쿼리에 수동으로 추가해야 합니다.

withTrashed 메서드는 일시 삭제된 레코드를 반환하는 반면, 일시 삭제되지 않은 레코드를 쿼리하는 데는 여전히 일반적인 메서드가 사용됩니다.

// 查询未被软删除的记录
$users = DB::table('users')->whereNull('deleted_at')->get();

// 查询被软删除的记录
$trashedUsers = DB::table('users')->whereNotNull('deleted_at')->get();

// 同时查询未被软删除和被软删除的记录
$usersWithTrashed = DB::table('users')->withTrashed()->get();

위의 예에서는 whereNull 및 whereNotNull 메서드를 사용하여 삭제되지 않은 레코드와 삭제된 레코드를 쿼리했습니다. withTrashed 메소드는 일시 삭제된 레코드를 쿼리하는 데에도 사용됩니다.

withTrashed 메소드 외에도 Laravel은 일시 삭제된 레코드를 쿼리하고 일시 삭제된 레코드를 복원하는 데 사용되는 onlyTrashed 및 복원이라는 두 가지 다른 메소드도 제공합니다. 사용법은 다음과 같습니다:

// 查询被软删除的记录
$trashedUsers = DB::table('users')->onlyTrashed()->get();

// 恢复软删除的记录
DB::table('users')->where('id', $id)->restore();

요약하자면 Laravel 일시 삭제된 데이터는 여전히 읽을 수 있지만 기본적으로 일시 삭제되지 않은 레코드만 쿼리됩니다. 일시 삭제된 레코드와 삭제되지 않은 레코드를 동시에 쿼리해야 하는 경우 withTrashed 메서드를 수동으로 추가해야 합니다. 또한 onlyTrashed 메서드를 사용하여 일시 삭제된 레코드를 쿼리하고 복원 메서드를 사용하여 일시 삭제된 레코드를 복원할 수도 있습니다. 이러한 방법을 익히면 개발자는 Laravel의 소프트 삭제 기능을 더 잘 적용하고 개발 효율성을 향상시킬 수 있습니다.

위 내용은 laravel에서 일시 삭제된 데이터를 계속 읽을 수 있는 방법에 대한 간략한 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.