Rumah > rangka kerja php > Laravel > teks badan

Apakah prinsip pemadaman lembut dalam laravel

WBOY
Lepaskan: 2022-02-22 18:18:30
asal
2441 orang telah melayarinya

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".

Apakah prinsip pemadaman lembut dalam laravel

Persekitaran pengendalian artikel ini: sistem Windows 10, Laravel versi 6, komputer Dell G3.

Apakah prinsip pemadaman lembut dalam laravel

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 '删除文章失败!';
}
Salin selepas log masuk
Kaedah ini mengembalikan

atau . truefalse

1.2 Gunakan destroy untuk memadam model

Sudah tentu, jika ID model yang hendak dipadam diketahui, anda boleh menggunakan kaedah yang lebih mudah

untuk memadamkannya terus:

destroy

Anda juga boleh memadamkan berbilang model dengan menghantar berbilang ID model pada satu masa:
$deleted = Post::destroy(5);
Salin selepas log masuk

Panggil kaedah
$deleted = Post::destroy([1,2,3,4,5]);
Salin selepas log masuk
untuk mengembalikan bilangan rekod yang dipadamkan.

destroy

1.3 Gunakan pembina pertanyaan untuk memadamkan model

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();
Salin selepas log masuk

2. Pemadaman lembut dan pelaksanaan yang berkaitan

2.1 Pelaksanaan pemadaman lembut

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_atdeleted_atUntuk menjadikan model Eloquent menyokong pemadaman lembut, beberapa tetapan perlu dibuat. Mula-mula, gunakan ciri

dalam kelas model Ciri ini menyediakan satu siri kaedah yang berkaitan untuk pemadaman lembut, sila rujuk kod sumber

Selain itu, anda mesti menetapkan tatasusunan atribut dan letakkan SoftDeletes di dalamnya: IlluminateDatabaseEloquentSoftDeletes$datedeleted_at Kemudian tambahkan lajur

pada pangkalan data yang sepadan
<?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;];
}
Salin selepas log masuk
Kami menggunakan migrasi untuk melaksanakan perintah Artisan:

postsdeleted_at dan kemudian edit fail PHP yang dijana seperti berikut:

php artisan make:migration alter_posts_deleted_at --table=posts
Salin selepas log masuk

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(&#39;posts&#39;, function (Blueprint $table) {
            $table->softDeletes();
        });
    }

    ...//其它方法
}
Salin selepas log masuk

supaya terdapat lajur

dalam
php artisan migrate
Salin selepas log masuk
. Seterusnya, kami menulis kod ujian dalam pengawal:

postsdeleted_atAkses

dalam penyemak imbas, output halaman adalah seperti berikut:
$post = Post::find(6);
$post->delete();
if($post->trashed()){
    echo '软删除成功!';
    dd($post);
}else{
    echo '软删除失败!';
}
Salin selepas log masuk

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);
Salin selepas log masuk

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

:

SoftDeleteswithTrashedSelepas pelaksanaan, halaman dipaparkan seperti berikut:

$posts = Post::withTrashed()->get();
dd($posts);
Salin selepas log masuk

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

:

SoftDeletesonlyTrashedSelepas pelaksanaan, halaman akan memaparkan perkara berikut. hasil:

$posts = Post::onlyTrashed()->get();
dd($posts);
Salin selepas log masuk

2.3 Pemulihan Pemadaman Lembut

Kadang-kadang kita perlu memulihkan model yang dipadam lembut, anda boleh menggunakan kaedah yang disediakan oleh

:

SoftDeletesrestorePulihkan model tunggal

Pulihkan berbilang model
$post = Post::find(6);
$post->restore();
Salin selepas log masuk

Pulihkan semua model
Post::withTrashed()->where('id','>',1)->restore();
Salin selepas log masuk

Pulihkan model pertanyaan berkaitan
Post::withTrashed()->restore();
Salin selepas log masuk

2.4 Pemadaman paksa
$post = Post::find(6);
$post->history()->restore();
Salin selepas log masuk

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

:

SoftDeletesforceDelete Mencari pada jadual data, kita dapati bahawa rekod jadual dengan id=6 telah dipadamkan:

$post = Post::find(6);
$post->forceDelete();
Salin selepas log masuk

[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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan