>  기사  >  PHP 프레임워크  >  하나의 기사에서 laravel 모델 삭제 및 소프트 삭제에 대해 알아보세요.

하나의 기사에서 laravel 모델 삭제 및 소프트 삭제에 대해 알아보세요.

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼앞으로
2019-11-20 17:06:524279검색

하나의 기사에서 laravel 모델 삭제 및 소프트 삭제에 대해 알아보세요.

1. 모델 삭제

1.1 삭제를 사용하여 모델 삭제

모델 삭제는 매우 간단합니다. 먼저 삭제할 모델 인스턴스를 가져오고 그런 다음 삭제 메소드를 호출하세요.

$post = Post::find(5);
if($post->delete()){
    echo '删除文章成功!';
}else{
    echo '删除文章失败!';
}

이 메소드는 true 또는 false를 반환합니다.

1.2 destroy를 사용하여 모델 삭제

물론 삭제할 모델 ID를 알고 있는 경우 더 간단한 destroy 메소드를 사용하여 직접 삭제할 수 있습니다.

$deleted = Post::destroy(5);

다음에서 여러 모델 ID를 전달할 수도 있습니다. 한 번에 여러 모델 삭제:

$deleted = Post::destroy([1,2,3,4,5]);

삭제된 레코드 수를 반환하려면 destroy 메소드를 호출하세요.

1.3 쿼리 빌더를 사용하여 모델 삭제

앞서 Eloquent 모델 자체가 쿼리 빌더라고 언급했으므로 쿼리 빌더 스타일을 사용하여 모델을 삭제할 수도 있습니다. 조회수가 0인 기사를 모두 삭제하려면 다음 방법을 사용할 수 있습니다.

$deleted = Models\Post::where('views', 0)->delete();

반환 결과는 삭제된 기사 수입니다.

2. 소프트 삭제 구현

위의 삭제 방법은 데이터베이스에서 데이터 테이블 레코드를 삭제합니다. 또한 Eloquent 모델은 소프트 삭제도 지원합니다.

소위 소프트 삭제란 데이터 테이블 레코드가 실제로 데이터베이스에서 삭제되는 것이 아니라 테이블 레코드의 식별 상태를 소프트 삭제로 표시하여 쿼리 시 필터링할 수 있도록 하여 해당 테이블이 삭제되는 것을 의미합니다. 기록이 삭제된 것으로 나타납니다. Laravel은 식별 상태로 날짜 필드를 사용합니다. 여기서는 delete_at를 사용합니다. 해당 모델이 소프트 삭제된 경우 delete_at 필드의 값은 삭제 시간입니다. 그렇지 않으면 값이 비어 있습니다.

Eloquent 모델이 소프트 삭제를 지원하려면 몇 가지 설정을 지정해야 합니다. 먼저, 모델 클래스에서 SoftDeletestrait를 사용하세요. 이 특성은 소프트 삭제를 위한 일련의 관련 메서드를 제공합니다. 자세한 내용은 소스 코드 IlluminateDatabaseEloquentSoftDeletes를 참조하세요. 또한 $date 속성 배열을 설정하고 그 안에 delete_at를 배치해야 합니다.

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Post extends Model
{
    use SoftDeletes;
    //设置表名
    public $table = &#39;posts&#39;;
    //设置主键
    public $primaryKey = &#39;id&#39;;
    //设置日期时间格式
    public $dateFormat = &#39;U&#39;;
    protected $guarded = [&#39;id&#39;,&#39;views&#39;,&#39;user_id&#39;,&#39;updated_at&#39;,&#39;created_at&#39;];
    protected $dates = [&#39;delete_at&#39;];
}

그런 다음 해당 데이터베이스 게시물에 delete_at 열을 추가하려면 마이그레이션을 사용하여 이를 구현합니다. 먼저 Artisan 명령을 실행합니다:

php artisan make:migration alter_posts_deleted_at --table=posts

그런 다음 생성된 PHP 파일을 다음과 같이 편집합니다:

<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AlterPostsDeletedAt extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table(&#39;posts&#39;, function (Blueprint $table) {
            $table->softDeletes();
        });
    }
    ...//其它方法
}

그런 다음 다음을 실행합니다:

php artisan migrate

게시물에 delete_at 열이 있다는 것입니다. 다음으로 컨트롤러에 테스트 코드를 작성합니다.

$post = Post::find(6);
$post->delete();
if($post->trashed()){
    echo &#39;软删除成功!&#39;;
    dd($post);
}else{
    echo &#39;软删除失败!&#39;;
}

쿼리 결과에 일시 삭제된 레코드를 포함하려면 어떻게 해야 할까요? SoftDeletes 특성에 withTrashed 메소드를 사용할 수 있습니다:

$posts = Post::withTrashed()->get();
dd($posts);

때로는 소프트 삭제된 모델만 보고 싶을 때도 있습니다. SoftDeletes의 onlyTrashed 메소드를 사용하는 방법도 있습니다:

$posts = Post::onlyTrashed()->get();
dd($posts);

소프트 삭제 복구

소프트 삭제된 모델을 복원해야 하는 경우가 있습니다.

단일 모델 복원

$post = Post::find(6);
$post->restore();

문제가 발생했습니다. ::find(6)는 데이터를 찾을 수 없는 경우

해야 합니다

$post = Post::withTrashed()->find(6);
$post->restore();

여러 모델을 복원

Post::withTrashed()->where(&#39;id&#39;,&#39;>&#39;,1)->restore();

모든 모델을 복원

Post::withTrashed()->restore();

관련 쿼리 모델을 복원

$post = Post::find(6);
$post->history()->restore();

강제 삭제

모델이 소프트 삭제로 구성된 경우 그러나 실제로 모델에 해당하는 데이터베이스 테이블 레코드를 삭제하려면 SoftDeletes에서 제공하는 forceDelete 메소드를 사용할 수 있습니다:

$post = Post::find(6);
$post->forceDelete();

PHP 중국어 웹사이트, 다수의 무료

laravel 입문 튜토리얼, 온라인 학습에 오신 것을 환영합니다!

이 기사는 https://blog.csdn.net/weixin_38112233/article/details/78574007

에서 복제되었습니다.

위 내용은 하나의 기사에서 laravel 모델 삭제 및 소프트 삭제에 대해 알아보세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제