بخش سوم - Seeders
Seeder یکی از ابزارهای لاراول است که برای وارد کردن دادههای اولیه یا نمونه به پایگاه داده استفاده میشود. این ابزار به توسعهدهندگان کمک میکند تا دادههای لازم برای تست یا مقداردهی اولیه پایگاه داده را به صورت خودکار و سریع ایجاد کنند.
فرض کنید میخواهید جدول cities را با دادههای اولیه شهرها پر کنید. این جدول ممکن است شامل نام شهرها و استانهای آنها باشد.
1- ایجاد Seeder
ابتدا Seeder جدیدی برای جدول شهرها ایجاد میکنیم، این کار به وسیله دستور زیر انجام می شود:
php artisan make:seeder CitySeeder
2- پر کردن Seeder
فایل database/seeders/CitySeeder.php را باز کرده و دادههای اولیه را به صورت دستی وارد کنید:
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use App\Models\City;
class CitySeeder extends Seeder
{
public function run()
{
$cities = [
['name' => 'Tehran', 'province' => 'Tehran'],
['name' => 'Mashhad', 'province' => 'Khorasan Razavi'],
['name' => 'Isfahan', 'province' => 'Isfahan'],
['name' => 'Shiraz', 'province' => 'Fars'],
['name' => 'Tabriz', 'province' => 'East Azerbaijan'],
];
foreach ($cities as $city) {
City::create($city);
}
// Or using query builder:
//City::insert($cities);
}
}
3- اجرای Seeder
برای اجرای Seeder شهرها، از دستور زیر استفاده کنید:
php artisan db:seed --class=CitySeeder
یا برای اجرای تمامی سیدر ها:
php artisan db:seed
گاهی در محیط پروداکشن سیدر ها ممکن است برای محافط از آسیب داده ها اجرا نشوند، برای این کار می توان از فلگ
—force استفاده کرد، اما مراقب داده های خود باشید:php artisan db:seed --force
پس از اجرای Seeder، جدول cities با داده های مشخص شده پر خواهد شد.
این روش برای مقداردهی اولیه دادههای ثابت مانند شهرها، دستهبندیها، یا تنظیمات بسیار مفید است و در زمان تست یا توسعه پروژه استفاده میشود.
استفاده از فکتوری ها در سیدر:
همچنین می توانید یک فکتوری را در سیدر خود فراخوانی کنید و داده های تستی خود را از فکتوری ایجاد کنید:
# UserSeeder.php
public function run(): void
{
User::factory()
->count(50)
->hasPosts(1)
->create();
}
فراخوانی سیدر های اضافی در یک سیدر:
همچنین می توانید از متد call استفاده کنید و سیدر های دیگری را در سیدر خود فراخوانی و اجرا کنید:
# FolanSeeder.php
public function run(): void
{
$this->call([
UserSeeder::class,
PostSeeder::class,
CommentSeeder::class,
]);
}
بی صدا کردن رویداد های مدل:
درصورت اجرای سیدر و ایجاد رکورد ها، رویداد های مدل ها نیز فراخوانی می شوند، شما می توانید با استفاده از تریت WithoutModelEvents، می توانید مانع فراخوانی این سیدر ها شوید:
class DatabaseSeeder extends Seeder
{
use WithoutModelEvents;
public function run(): void
{
$this->call([
UserSeeder::class,
]);
}
}
#laravel #لاراول #فصل_۵
@AmirhDeveloper
.