Laravel 8과 7에서 소프트 삭제를 사용하여 휴지통을 만드는 방법

10896 단어 laravelphpwebdev
안녕하세요. 저는 삭제에 관한 Laravel 개념에 대해 토론하고 싶습니다. 가끔은 사용자가 데이터를 삭제해도 영구적으로 삭제되지 않고 데이터베이스에 남아 있지만 보기에 나타나지 않도록 프로그램을 설계하기를 원할 수도 있습니다.Laravel은 이 상자를 열면 바로 사용할 수 있는 기능을 제공해 주었습니다. 이를 soft Delete라고 합니다. 그래서 저는 데이터를 어떻게 삭제하고 삭제된 데이터를 보는지, 그리고 삭제된 데이터를 어떻게 복원하는지, 마지막으로 데이터를 영구적으로 삭제하는지 설명합니다. 저는'휴지통'이라고 합니다.
우리는 나의 이전 문장repo의 코드를 사용할 것이다
하면, 만약, 만약...
my를 누르면 나를 따라 더 많은 업데이트를 얻을 수 있습니다.

1단계: 어플리케이션 설치

  • git클론https://github.com/Kingsconsult/laravel_8_crud.git
  • cd laravel 8 때가 끼다/
  • 작곡가 설치
  • npm 설치
  • cp.환경예.환경
  • php artisan 키:생성
  • 에 데이터베이스 구성을 추가합니다.env 파일 (이 점을 어떻게 실현하는지 볼 수 있는 글)
  • php artisan 마이그레이션
  • php artisan serve(서버가 열리면http://127.0.0.1:8000 우리는 시작할 수 있습니다)

  • 탐색 대상http://127.0.0.1:8000/projects
  • 2단계: 프로젝트 테이블에 delete at 열 추가하기


    Laravel Soft Delete에서 데이터는 실제로 데이터베이스에서 삭제되지 않고 데이터에 deleted at 속성을 추가합니다. 따라서 데이터베이스에서 데이터를 조회할 때 Eloquent는 값이 null deleted at인 데이터를 찾아서 보내지만 데이터 값이 null deleted at가 아닌 경우 삭제된 데이터로 간주합니다.
    그래서 우리는 그것을 추가하고 다시 이동을 실행해야 한다.

    3단계: 마이그레이션 파일에 delete at 열 추가


    실행 단계 2의 명령은 데이터베이스/migrations/에서 이전 파일을 만들고 이 파일을 편집하고 $table->softDeletes () 를 추가합니다.함수와 $table->dropSoftDeletes ();down () 함수에 대한 우리의 이전 파일은 다음과 같다

    4단계: 마이그레이션 다시 실행


    새 열을 기존 테이블에 추가하기 위해 이전을 다시 실행해야 합니다

    php artisan migrate



    데이터베이스로 이동하면 Null 값으로 만든 새 열이 표시됩니다.

    단계 5: 모델에서softdelete 기능 사용하기


    응용 프로그램/모델/프로젝트로 이동합니다.php와 소프트 삭제 기능을 추가합니다. 이 기능은 삭제된 모델에 영구적으로 삭제하는 것이 아니라 날짜만 추가하는 것을 알려줍니다.

    use SoftDeletes;


    또한 상단에 피쳐 경로 추가하기

    use Illuminate\Database\Eloquent\SoftDeletes;


    6단계: 삭제된 모든 항목을 가져올 라우트를 작성합니다.


    routes/웹으로 이동합니다.php 및 삭제된 모든 항목 가져오기

    Route::get('projects/deletedprojects', [ProjectController::class, 'getDeleteProjects'])->name('getDeleteProjects');


    단계 7: 컨트롤러 생성 방법


    위의 경로에서 프로젝트 컨트롤러 클래스에 getDeleted Projects 방법을 지정했기 때문에 이 방법을 만들었습니다.app/Http/Controllers/ProjectController로 이동합니다.php 및 이 메서드 추가
        public function getDeleteProjects() {
            $projects = Project::onlyTrashed()->paginate(10);
    
            return view('projects.deletedprojects', compact('projects'))
                ->with('i', (request()->input('page', 1) - 1) * 10);
        }
    
    위의 방법에서 웅변적인 함수 onlyTrashed () 를 사용했습니다. 이 함수는null deleted at 값이 아닌 모델만 가져와서 삭제된 항목만 가져옵니다.

    8단계: 삭제된 모든 항목을 볼 블레이드 파일 생성


    위의 getDeletedProjects () 방법에서 deletedprojects 보기를 되돌려줍니다. 따라서 이 보기를 만들고 Resources/views/projects/파일deletedprojects로 이동해야 합니다.칼날.php 인덱스 페이지 복사 및 편집
    @extends('layouts.app')
    
    @section('content')
        <div class="row">
            <div class="col-lg-12 margin-tb">
                <div class="pull-left">
                    <h2>Laravel 8 CRUD </h2>
                </div>
            </div>
        </div>
    
        <div class="pull-left ">
            <a class="btn btn-success" href="{{ route('projects.index') }}" title="Back to Index"> <i class="fas fa-home"></i> </a>
        </div>
        <div class="">
            <div class="mx-auto pull-right">
                <div class="">
                    <form action="{{ route('projects.index') }}" method="GET" role="search">
    
                        <div class="input-group">
                            <span class="input-group-btn mr-5 mt-1">
                                <button class="btn btn-info" type="submit" title="Search projects">
                                    <span class="fas fa-search"></span>
                                </button>
                            </span>
                            <input type="text" class="form-control mr-2" name="term" placeholder="Search projects" id="term">
                            <a href="{{ route('projects.index') }}" class=" mt-1">
                                <span class="input-group-btn">
                                    <button class="btn btn-danger" type="button" title="Refresh page">
                                        <span class="fas fa-sync-alt"></span>
                                    </button>
                                </span>
                            </a>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    
        @if ($message = Session::get('success'))
            <div class="alert alert-success">
                <p>{{ $message }}</p>
            </div>
        @endif
    
        <table class="table table-bordered table-responsive-lg">
            <tr>
                <th>No</th>
                <th>Name</th>
                <th>Introduction</th>
                <th>Location</th>
                <th>Cost</th>
                <th>Date Deleted</th>
                <th>Action</th>
            </tr>
            @foreach ($projects as $project)
                <tr>
                    <td>{{ ++$i }}</td>
                    <td>{{ $project->name }}</td>
                    <td>{{ $project->introduction }}</td>
                    <td>{{ $project->location }}</td>
                    <td>{{ $project->cost }}</td>
                    <td>{{ date_format($project->deleted_at, 'jS M Y') }}</td>
                    <td>
                        <a href="{{ route('restoreDeletedProjects', $project->id) }}" title="restore project">
                            <i class="fas fa-window-restore text-success  fa-lg"></i>
                        </a>
                        <a href="{{ route('deletePermanently', $project->id) }}" title="Permanently delete">
                            <i class="fas fa-trash text-danger  fa-lg"></i>
                        </a>
                    </td>
                </tr>
            @endforeach
        </table>
    
        {!! $projects->links() !!}
    
    
    @endsection
    
    위 코드의 항목 "작업"열에 삭제된 파일을 복원하는 아이콘을 추가했습니다. 이것은 테이블에서 삭제된 위치의 값을 삭제하고, 또 다른 아이콘을 추가해서 항목을 영구적으로 삭제합니다. 데이터베이스에서 항목을 영구적으로 삭제합니다.
    다음에 삭제된 항목을 복구하기 위해 함수를 만들어야 합니다.

    9단계: 삭제된 항목을 복원하기 위한 라우팅 작성


    Route::get('projects/deletedprojects/{id}', [ProjectController::class, 'restoreDeletedProjects'])->name('restoreDeletedProjects');


    Google 과정에서 컨트롤러 방법도 지정했습니다. Restored Deleted Projects. 그래서 프로젝트 컨트롤러로 이동해서 이 방법을 만듭니다.

    10단계: 삭제된 항목 복구를 위한 컨트롤러 만들기


    app/Http/Controllers/ProjectController로 이동합니다.php 및 이 메서드 추가
        public function restoreDeletedProjects($id) 
        {
    
            $project = Project::where('id', $id)->withTrashed()->first();
    
            $project->restore();
    
            return redirect()->route('projects.index')
                ->with('success', 'You successfully restored the project');
        }
    

    11단계: 항목을 영구적으로 삭제하기 위한 라우팅 작성


    데이터베이스에 남기고 싶지 않은 항목을 영구적으로 삭제하는 기능을 만들어야 하기 때문에 루트를 만듭니다

    Route::get('projects/retoreprojects/{id}', [ProjectController::class, 'deletePermanently'])->name('deletePermanently');


    12단계: 컨트롤러 생성 방법


        public function deletePermanently($id)
        {
            $project = Project::where('id', $id)->withTrashed()->first();
    
            $project->forceDelete();
    
            return redirect()->route('projects.index')
                ->with('success', 'You successfully deleted the project fromt the Recycle Bin');
    
        }
    
    이것들만, 우리 일을 시험해 봅시다.
    저희가 프로젝트를 만들었는데,

    또한 삭제된 모든 항목이 표시된 페이지에 포함된 재활용 아이콘을 추가한 후 두 항목을 삭제하고 재활용 페이지로 이동합니다.


    이것은 우리가 색인 페이지에서 삭제한 항목입니다. 여기는 두 개의 아이콘이 있습니다. 하나는 삭제된 항목을 복원하는 데 사용되고, 다른 하나는 데이터베이스에서 항목을 영구적으로 삭제하는 데 사용됩니다
    우리는 항목을 복원한 후에 색인으로 되돌아갔고, 마지막으로 우리는 영구적으로 다른 항목을 삭제했다

    Github repo 에서 온전한 코드를 얻을 수 있습니다.
    저의 더 많은 글을 주목해 주십시오. 당신은 평론, 건의, 반응을 남길 수 있습니다.
    모든 PHP 백엔드 엔지니어의 공백을 수용하고 싶습니다. Laravel 프레임워크의 장점은

    좋은 웹페이지 즐겨찾기