برنامه نویسی

Laravel Eloquent ORM در Bangla Part-7 (مدل های هرس)

لاراول Eloquent-এ مدل های هرس فرآیند حذف خودکار رکوردهای قدیمی یا غیر ضروری در پایگاه داده است. این به بهبود عملکرد پایگاه داده های بزرگ کمک می کند و از جمع آوری داده های غیر ضروری جلوگیری می کند. در لاراول شما هرس کردن می تواند به طور خاص انجام دهد کارهای برنامه ریزی شده یا دستورات صنعتگر با استفاده از

روشهای اصلی:

1. هرس مدل های قدیمی (حذف رکوردهای قدیمی)

زمانی که رکوردهای قدیمی باید پس از یک دوره زمانی مشخص حذف شوند، تنظیم می شود. به عنوان مثال، اگر می خواهید یک پست 30 روز پس از ایجاد به طور خودکار حذف شود، پس هرس کردن انجام می شود

prune() با استفاده از روش:

از نسخه لاراول Eloquent 8.x prune() روش معرفی شد. این روش به طور خاص برای حذف رکوردها با توجه به یک شرایط خاص استفاده می شود.

use App\Models\Post;

class Post extends Model
{
    protected static function booted()
    {
        static::pruning(function ($query) {
            // ৩০ দিন আগে যে পোস্টগুলি তৈরি হয়েছে, সেগুলি ডিলিট করা হবে
            $query->where('created_at', '<', now()->subDays(30));
        });
    }
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

هر بار که تو هستی Post::prune() اجرا کنید، پست های 30 روز پیش را حذف می کند.

2. هرس با وظایف برنامه ریزی شده

لاراول زمانبندی کار می توانید از آن برای حذف منظم داده های قدیمی در یک زمان خاص استفاده کنید.

ابتدا Task Schedule را ایجاد کنید:

  1. app/Console/Kernel.php به فایل و آنجا بروید schedule() تابع هرس خود را به روش اضافه کنید.
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)
    {
        // প্রতিদিন ১টার সময় পুরনো পোস্টগুলো prune করবে
        $schedule->call(function () {
            Post::where('created_at', '<', now()->subDays(30))->delete();
        })->dailyAt('01:00');
    }
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

هر روز ساعت 13، پست های قدیمی تر از 30 روز حذف خواهند شد.

3. هرس با دستور Artisan

همچنین با استفاده از دستور Artisan می توانید هرس را به صورت دستی انجام دهید. با ایجاد یک دستور جدید در Laravel Artisan می توانید داده ها را حذف کنید.

ایجاد دستورات Artisan سفارشی:

  1. ایجاد دستور:
php artisan make:command PruneOldPosts

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  1. app/Console/Commands/PruneOldPosts.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()
    {
        // ৩০ দিন আগে যে পোস্টগুলি তৈরি হয়েছে, সেগুলি ডিলিট করা হবে
        Post::where('created_at', '<', now()->subDays(30))->delete();

        $this->info('Old posts pruned successfully!');
    }
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  1. دستور را اجرا کنید:
php artisan posts:prune-old

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

به صورت دستی اجرا می شود و پست های قدیمی تر از 30 روز را حذف می کند.

4. حذف و هرس نرم

گاهی اوقات ممکن است بخواهید از حذف نرم استفاده کنید، یعنی فقط رکورد را بدون حذف کامل به عنوان “حذف شده” علامت بزنید. در این مورد، با حذف نرم هرس کردن می تواند انجام دهد

use App\Models\Post;

class Post extends Model
{
    use SoftDeletes;

    protected static function booted()
    {
        static::pruning(function ($query) {
            // ৩০ দিন পুরনো সফট ডিলিট হওয়া পোস্টগুলো prune করা হবে
            $query->where('deleted_at', '<', now()->subDays(30));
        });
    }
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

با این کار پست های قدیمی تر از 30 روز که به نرمی حذف شده اند حذف می شود.

. Prune و Eloquent روابط

وقتی می خواهید رابطه ای را با رکورد حذف کنید، باید رابطه را نیز حذف کنید. به عنوان مثال، اگر می خواهید یک پست برای حذف نظرات مرتبط با آن حذف شود، پس آبشار حذف می شود می تواند استفاده کند

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();
        });
    }
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این باعث می شود که هنگام حذف پست، نظرات مربوط به آن نیز حذف شوند.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا