Laravel Database Seeding
লারাভেল ফ্রেমওয়ার্ক এ Seeding বা Seeder কি?
Laravel Framework এ seeding হচ্ছে একটি স্বয়ংক্রিয় প্রক্রিয়া যা একটি অ্যাপ্লিকেশনের প্রাথমিক তথ্য (sample data) insert এর জন্য চালানো হয়। লারাভেল ফ্রেমওয়ার্ক এই কাজটি seeder class গুলোর মাধ্যমে করে থাকে। যদিও আপনি এটি Laravel Migration এর মাধ্যমে করতে পারেন কিন্তু এটি একটি bad practice. কারণ আপনি যত বার Migration run করবেন প্রত্যেক বারই একই স্যাম্পল Data আপনার টেবিল এ Insert হবে , যেটি আপনার প্রোডাকশন ডাটাকে interfere করবে। তা ছাড়া seeder class গুলোর মাধ্যমে আপনি স্যাম্পল ডাটা insert এর কাজটি প্রত্যেকটি টেবিল এর জন্য আলাদা আলাদা ভাবে করতে পারবেন। সব seed class ই database/seeds ফোল্ডারে সংরক্ষিত থাকে। seed ক্লাস গুলোকে আপনি যেকোনো নামে রাখতে পারেন। তবে কিছু convention ফলো করা উচিত, যেমন: UsersTableSeeder ইত্যাদি। বাই ডিফল্ট Laravel আপনার জন্য DatabaseSeeder class টি ডিফাইন করে রেখেছে। আর এই class এর call() Method দিয়ে অন্যান্য seed class গুলোকে run করতে পারেন এবং seeding অর্ডার কন্ট্রোল করতে পারবেন।
লারাভেল এ কিভাবে Seeder Generate করবেন?
Seeder Generate করার জন্য আপনাকে Laravel Artisan Command make:seeder এই কমান্ড টি রান করতে হবে। নিচে লক্ষ্য করুন:
php artisan make:seeder UsersTableSeeder
Generating Laravel Seeder
এখন আপনি database/seeds ফোল্ডারে আপনার seeder class টি দেখতে পাবেন ঠিক নিচের মতো :
Laravel Seeder Class Location
<?php
use Illuminate\Database\Seeder;
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//
}
}
কিভাবে একটি টেবিল এ dummy data Insert করার জন্য Seeder লিখবেন?
Seeder class এ শুধু মাত্র run নামে একটি default Method থাকবে , এই run মেথডের মাধ্যমেই আপনার Database এ Dummy Data Insert করতে হবে। আর এর জন্য আপনি Laravel এর Query Builder এর insert() Method ব্যবহার করতে পারেন। নিচে লক্ষ্য করুন :
<?php
use Illuminate\Database\Seeder;
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//
$users=[[
'name' => str_random(10),
'email' => str_random(10).'@gmail.com',
'password' => bcrypt('secret'),
],
[
'name' => str_random(10),
'email' => str_random(10).'@gmail.com',
'password' => bcrypt('secret'),
],
[
'name' => str_random(10),
'email' => str_random(10).'@gmail.com',
'password' => bcrypt('secret'),
]];
DB::table('users')->insert($users);
}
}
Seeder কিভাবে রান করবেন?
seeder লেখার পর এটি রান করার জন্য আপনাকে Composer autoloader কে dump-autoload command এর মাধ্যমে regenerate করতে হতে পারে।
composer dump-autoload
Output
Laravel Dump Autoload
autoload file গুলো regenerate হয়ে যাওয়ার পর, এখন আপনি চাইলে db::seed command এর মাধ্যমে সব গুলো seeder class রান করতে পারেন। এক্ষেত্রে অতিরিক্ত seeder class গুলো রান করার জন্য আপনাকে DatabaseSeeder class এর run() Method এর মধ্যে call() Method দিয়ে সব গুলো seed Class কে কল করে রাখতে হবে। নিচের উদাহরণ দেখুন:
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->call([
UsersTableSeeder::class,
PostsTableSeeder::class,
CommentsTableSeeder::class,
]);
}
তারপর নিচের artisan command টি রান করতে হবে।
php artisan db:seed
আর যদি প্রত্যেকটি table এর আলাদা seeder রান করতে চান সে ক্ষেত্রে আপনাকে db::seed –class=YourSeederClassName command এর মাধ্যমে প্রত্যেকটি table এর আলাদা seeder রান করতে পারেন।
php artisan db:seed --class=UsersTableSeeder
Sample Dummy Data
Sample Dummy Data Using Laravel Seeder Class