Rumah > pangkalan data > tutorial mysql > ORM Fasih Laravel dalam Model Pemangkasan Bahagian Bangla)

ORM Fasih Laravel dalam Model Pemangkasan Bahagian Bangla)

Mary-Kate Olsen
Lepaskan: 2025-01-16 20:18:11
asal
981 orang telah melayarinya

Laravel Eloquent ORM in Bangla Part-Pruning Models)

Ciri pemangkasan model Laravel Eloquent membolehkan anda memadamkan rekod lapuk atau tidak diingini secara automatik dalam pangkalan data anda. Ini membantu meningkatkan prestasi pangkalan data yang besar dan menghalang pengumpulan data yang tidak diperlukan. Dalam Laravel, anda boleh melakukan operasi pemangkasan melalui tugas berjadual atau arahan Artisan.

Kaedah utama:

1. Pemangkasan model lama (padam rekod lama)

Kaedah ini boleh digunakan apabila rekod lama perlu dipadamkan selepas masa tertentu. Contohnya, jika anda mahu siaran dipadamkan secara automatik 30 hari selepas ia dibuat, anda boleh menggunakan ciri trim.

Gunakan prune() kaedah:

Laravel Eloquent 8.x versi memperkenalkan kaedah prune(). Kaedah ini direka untuk memadam rekod berdasarkan syarat tertentu.

<code class="language-php">use App\Models\Post;

class Post extends Model
{
    protected static function booted()
    {
        static::pruning(function ($query) {
            // 删除 30 天前创建的帖子
            $query->where('created_at', '<', now()->subDays(30));
        });
    }
}</code>
Salin selepas log masuk

Setiap kali anda menjalankan Post::prune() ia akan memadamkan siaran yang berumur 30 hari.

2. Gunakan tugas berjadual untuk pemangkasan

Anda boleh menggunakan fungsi penjadualan tugas Laravel untuk kerap memadam data lama pada masa tertentu.

Buat tugasan berjadual:

  1. Buka fail app/Console/Kernel.php dan tambahkan tugas pemangkasan anda dalam kaedah schedule().
<code class="language-php">use App\Models\Post;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    protected function schedule(Schedule $schedule)
    {
        // 每天凌晨 1 点修剪旧帖子
        $schedule->call(function () {
            Post::where('created_at', '<', now()->subDays(30))->delete();
        })->dailyAt('01:00');
    }
}</code>
Salin selepas log masuk

Ini akan memadamkan siaran dari 30 hari yang lalu setiap hari pada jam 1 pagi.

3. Gunakan arahan Artisan untuk memangkas

Anda juga boleh melakukan operasi pemangkasan secara manual menggunakan arahan Artisan. Padamkan data dengan mencipta arahan Laravel Artisan baharu.

Buat perintah Artisan tersuai:

  1. Buat arahan:
<code class="language-bash">php artisan make:command PruneOldPosts</code>
Salin selepas log masuk
  1. Buat perintah tersuai dalam fail app/Console/Commands/PruneOldPosts.php:
<code class="language-php">namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\Models\Post;

class PruneOldPosts extends Command
{
    protected $signature = 'posts:prune-old';
    protected $description = 'Prune posts older than 30 days';

    public function handle()
    {
        // 删除 30 天前创建的帖子
        Post::where('created_at', '<', now()->subDays(30))->delete();

        $this->info('Old posts pruned successfully!');
    }
}</code>
Salin selepas log masuk
  1. Arahan jalankan:
<code class="language-bash">php artisan posts:prune-old</code>
Salin selepas log masuk

Ini akan dijalankan secara manual dan memadamkan siaran yang berumur 30 hari.

4. Padam dan pangkas lembut

Kadangkala anda mungkin mahu menggunakan padam lembut, yang bermaksud tidak memadamkan rekod sepenuhnya, tetapi hanya menandakannya sebagai "dipadamkan". Dalam kes ini, anda boleh menggabungkan fungsi padam lembut dan pemangkasan.

<code class="language-php">use App\Models\Post;

class Post extends Model
{
    use SoftDeletes;

    protected static function booted()
    {
        static::pruning(function ($query) {
            // 修剪 30 天前软删除的帖子
            $query->where('deleted_at', '<', now()->subDays(30));
        });
    }
}</code>
Salin selepas log masuk

Ini akan memadamkan siaran yang dipadam lembut yang berusia 30 hari.

5. Perhubungan Pemangkasan dan Fasih

Apabila anda ingin memadamkan rekod yang berkaitan dengan rekod, anda perlu memadamkan hubungan tersebut pada masa yang sama. Sebagai contoh, jika anda mahu apabila siaran dipadamkan turut memadamkan ulasan yang berkaitan dengannya, anda boleh menggunakan pemadaman bertingkat.

<code class="language-php">class Post extends Model
{
    use SoftDeletes;

    public function comments()
    {
        return $this->hasMany(Comment::class);
    }

    protected static function booted()
    {
        static::deleting(function ($post) {
            // 删除帖子时删除所有评论
            $post->comments()->delete();
        });
    }
}</code>
Salin selepas log masuk

Ini akan memastikan bahawa apabila siaran dipadamkan ulasan yang berkaitan juga dipadamkan.

Atas ialah kandungan terperinci ORM Fasih Laravel dalam Model Pemangkasan Bahagian Bangla). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan