Laravel Eloquent-এ Pruning Models হচ্ছে ডাটাবেসে পুরনো বা অপ্রয়োজনীয় রেকর্ডগুলি স্বয়ংক্রিয়ভাবে মুছে ফেলার প্রক্রিয়া। এটি বড় ডাটাবেসের পারফরম্যান্স উন্নত করতে সাহায্য করে এবং অপ্রয়োজনীয় ডেটা জমে না যেতে দেয়। Laravel এ আপনি pruning করতে পারেন বিশেষভাবে scheduled jobs বা artisan commands ব্যবহার করে।
প্রধান পদ্ধতিগুলি:
১. Old Models Pruning (পুরনো রেকর্ড ডিলিট করা)
যখন কোনো নির্দিষ্ট সময় পর পুরনো রেকর্ড মুছে ফেলা প্রয়োজন হয়, তখন এটি প্রণালীভুক্ত করা হয়। উদাহরণস্বরূপ, আপনি যদি চান যে একটি পোস্ট তৈরি হওয়ার পর ৩০ দিন পর অটোমেটিকভাবে সে পোস্টটি ডিলিট হয়ে যাবে, তাহলে pruning করা হয়।
prune()
মেথড ব্যবহার করা:
Laravel Eloquent ৮.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()
চালাবেন, এটি ৩০ দিন আগের পোস্টগুলো ডিলিট করবে।
২. Scheduled Task দিয়ে Pruning
Laravel-এর Task Scheduling ব্যবহার করে আপনি একটি নির্দিষ্ট সময়ে নিয়মিতভাবে পুরনো ডেটা ডিলিট করার কাজটি করতে পারেন।
প্রথমে Task Schedule তৈরি করুন:
-
app/Console/Kernel.php
ফাইলে যেতে হবে এবং সেখানেschedule()
মেথডে আপনার pruning কাজটি অ্যাড করতে হবে।
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');
}
}
এখানে প্রতিদিন রাত ১টার সময় পোস্টগুলোর মধ্যে যেগুলি ৩০ দিনের পুরনো হবে, সেগুলি ডিলিট হয়ে যাবে।
৩. Artisan Command দিয়ে Pruning
এছাড়াও, আপনি Artisan command ব্যবহার করে ম্যানুয়ালি pruning কাজ করতে পারেন। Laravel Artisan-এ নতুন কমান্ড তৈরি করে ডেটা মুছে ফেলতে পারেন।
Custom Artisan Command তৈরি করুন:
- Command তৈরি করুন:
php artisan make:command PruneOldPosts
-
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!');
}
}
- Command চালান:
php artisan posts:prune-old
এটি ম্যানুয়ালি চলবে এবং ৩০ দিন আগের পোস্টগুলো ডিলিট করবে।
৪. Soft Delete এবং Pruning
কখনও কখনও আপনি সফট ডিলিট ব্যবহার করতে চাইতে পারেন, অর্থাৎ, রেকর্ডটি সম্পূর্ণভাবে ডিলিট না করে শুধু "ডিলিট হওয়া" স্ট্যাটাসে চিহ্নিত করবেন। এ ক্ষেত্রে, সফট ডিলিটের সাথে pruning করতে পারেন।
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));
});
}
}
এটি সফট ডিলিট হওয়া ৩০ দিন পুরনো পোস্টগুলো মুছে ফেলবে।
৫. Prune
এবং Eloquent
Relationships
যখন আপনি একটি রেকর্ডের সাথে সম্পর্কযুক্ত (relationship) রেকর্ড ডিলিট করতে চান, তখন আপনাকে সম্পর্কগুলোও মুছে ফেলতে হবে। উদাহরণস্বরূপ, আপনি যদি চান যে একটি পোস্ট ডিলিট হলে তার সাথে সম্পর্কিত মন্তব্যগুলোও ডিলিট হোক, তাহলে Cascade Deletes ব্যবহার করতে পারেন।
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();
});
}
}
এটি নিশ্চিত করবে যে পোস্টটি ডিলিট হলে তার সম্পর্কিত মন্তব্যগুলোও ডিলিট হবে।
Top comments (0)