Rumah >pangkalan data >tutorial mysql >ORM Fasih Laravel dalam Model Pemangkasan Bahagian Bangla)
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 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.
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>
Setiap kali anda menjalankan Post::prune()
ia akan memadamkan siaran yang berumur 30 hari.
Anda boleh menggunakan fungsi penjadualan tugas Laravel untuk kerap memadam data lama pada masa tertentu.
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>
Ini akan memadamkan siaran dari 30 hari yang lalu setiap hari pada jam 1 pagi.
Anda juga boleh melakukan operasi pemangkasan secara manual menggunakan arahan Artisan. Padamkan data dengan mencipta arahan Laravel Artisan baharu.
<code class="language-bash">php artisan make:command PruneOldPosts</code>
<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>
<code class="language-bash">php artisan posts:prune-old</code>
Ini akan dijalankan secara manual dan memadamkan siaran yang berumur 30 hari.
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>
Ini akan memadamkan siaran yang dipadam lembut yang berusia 30 hari.
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>
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!