Dalam laravel, pemadaman lembut bermaksud bahawa rekod jadual data sebenarnya tidak dipadamkan daripada pangkalan data, tetapi status perwakilan rekod jadual ditandakan sebagai pemadaman lembut, supaya ia boleh ditapis semasa pertanyaan, supaya Rekod jadual yang sepadan kelihatan seperti telah "dipadamkan".
Persekitaran pengendalian artikel ini: sistem Windows 10, Laravel versi 6, komputer Dell G3.
1 Padam model
1.1 Gunakan padam untuk memadam model
Memadam model adalah sangat mudah, mula-mula dapatkan contoh model untuk dipadamkan, dan kemudian panggil kaedah: delete
$post = Post::find(5); if($post->delete()){ echo '删除文章成功!'; }else{ echo '删除文章失败!'; }
atau . true
false
Sudah tentu, jika ID model yang hendak dipadam diketahui, anda boleh menggunakan kaedah yang lebih mudah
untuk memadamkannya terus:destroy
$deleted = Post::destroy(5);
$deleted = Post::destroy([1,2,3,4,5]);
destroy
Memandangkan telah disebut sebelum ini bahawa model Eloquent itu sendiri ialah pembina pertanyaan, anda juga boleh menggunakan gaya pembina pertanyaan untuk memadam model. Contohnya, kami mahu Untuk memadam semua artikel dengan 0 paparan, anda boleh menggunakan kaedah berikut:
Hasil pulangan ialah bilangan artikel yang dipadam.$deleted = Models\Post::where('views', 0)->delete();
Kaedah pemadaman di atas semuanya akan merekodkan data jadual Padam daripada pangkalan data Selain itu, model Eloquent juga menyokong pemadaman lembut.
Apa yang dipanggil pemadaman lembut bermaksud bahawa rekod jadual data sebenarnya tidak dipadamkan daripada pangkalan data, tetapi status pengenalan rekod jadual ditandakan sebagai pemadaman lembut, supaya ia boleh ditapis semasa membuat pertanyaan, jadi yang direkodkan jadual yang sepadan Nampaknya ia telah "dipadamkan". Laravel menggunakan medan tarikh sebagai status pengenalan Medan tarikh ini boleh disesuaikan Di sini kami menggunakan
Jika model yang sepadan dipadamkan, nilai medan ialah masa pemadaman. . deleted_at
deleted_at
Untuk menjadikan model Eloquent menyokong pemadaman lembut, beberapa tetapan perlu dibuat. Mula-mula, gunakan ciri
Selain itu, anda mesti menetapkan tatasusunan atribut dan letakkan SoftDeletes
di dalamnya: IlluminateDatabaseEloquentSoftDeletes
$date
deleted_at
Kemudian tambahkan lajur
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Post extends Model { use SoftDeletes; //设置表名 public $table = 'posts'; //设置主键 public $primaryKey = 'id'; //设置日期时间格式 public $dateFormat = 'U'; protected $guarded = ['id','views','user_id','updated_at','created_at']; protected $dates = ['delete_at']; }
posts
deleted_at
dan kemudian edit fail PHP yang dijana seperti berikut:
php artisan make:migration alter_posts_deleted_at --table=posts
Kemudian jalankan:
<?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('posts', function (Blueprint $table) { $table->softDeletes(); }); } ...//其它方法 }
supaya terdapat lajur
dalamphp artisan migrate
posts
deleted_at
Akses
$post = Post::find(6); $post->delete(); if($post->trashed()){ echo '软删除成功!'; dd($post); }else{ echo '软删除失败!'; }
http://laravel.app:8000/test
Apabila Kami sekali lagi memperoleh semua artikel melalui kod berikut:
Artikel dengan id 6 tidak lagi kelihatan.
$posts = Post::all(); dd($posts);
2.2 Hasil pertanyaan mengandungi model yang dipadam lembut
Bagaimana jika anda ingin memasukkan rekod yang dipadam lembut dalam hasil pertanyaan? Anda boleh menggunakan kaedah pada ciri
:SoftDeletes
withTrashed
Selepas pelaksanaan, halaman dipaparkan seperti berikut:
$posts = Post::withTrashed()->get(); dd($posts);
Artikel dengan id 6 muncul semula dalam hasil pertanyaan. Kadang-kadang kita hanya mahu melihat model yang dipadam lembut. Terdapat cara untuk melakukan ini. Hanya gunakan kaedah pada
:SoftDeletes
onlyTrashed
Selepas pelaksanaan, halaman akan memaparkan perkara berikut. hasil:
$posts = Post::onlyTrashed()->get(); dd($posts);
2.3 Pemulihan Pemadaman Lembut
Kadang-kadang kita perlu memulihkan model yang dipadam lembut, anda boleh menggunakan kaedah yang disediakan oleh
:SoftDeletes
restore
Pulihkan model tunggal
Pulihkan berbilang model
$post = Post::find(6); $post->restore();
Pulihkan semua model
Post::withTrashed()->where('id','>',1)->restore();
Pulihkan model pertanyaan berkaitan
Post::withTrashed()->restore();
2.4 Pemadaman paksa
$post = Post::find(6); $post->history()->restore();
Jika model dikonfigurasikan dengan Padam lembut Tetapi jika kita benar-benar ingin memadam rekod jadual pangkalan data yang sepadan dengan model, kita boleh menggunakan kaedah yang disediakan oleh
:SoftDeletes
forceDelete
Mencari pada jadual data, kita dapati bahawa rekod jadual dengan id=6 telah dipadamkan:
$post = Post::find(6); $post->forceDelete();
[Cadangan berkaitan: tutorial video laravel<.>]
Atas ialah kandungan terperinci Apakah prinsip pemadaman lembut dalam laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!