نسخه:

پایگاه داده: بذر

معرفی

لاراول شامل توانایی دانه بندی پایگاه داده شما با داده ها با استفاده از کلاس های seed است. تمام کلاس های seed در database/seeders دایرکتوری ذخیره می شوند. به طور پیش فرض یک DatabaseSeeder کلاس برای شما تعریف شده است. از این کلاس، می‌توانید از call روش برای اجرای سایر کلاس‌های seed استفاده کنید که به شما امکان می‌دهد ترتیب دانه‌بندی را کنترل کنید.

حفاظت از تخصیص انبوه به طور خودکار در طول کاشت پایگاه داده غیرفعال می شود.

بذرهای نوشتن

برای ایجاد یک seeder، make:seeder دستور Artisan را اجرا کنید . تمام بذرهای تولید شده توسط فریمورک در database/seeders دایرکتوری قرار خواهند گرفت:

php artisan make:seeder UserSeeder

یک کلاس seder به طور پیش فرض فقط شامل یک متد است: run . این متد زمانی فراخوانی می شود که db:seed دستور Artisan اجرا شود. در این run روش، می‌توانید داده‌ها را هر طور که بخواهید در پایگاه داده خود وارد کنید. می توانید از سازنده پرس و جو برای درج دستی داده ها یا می توانید از کارخانه های مدل Eloquent استفاده کنید .

به عنوان مثال، اجازه دهید DatabaseSeeder کلاس پیش فرض را تغییر دهیم و یک دستور درج پایگاه داده به run متد اضافه کنیم:

<?php
 
namespace Database\Seeders;
 
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
 
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeders.
*/
public function run(): void
{
DB::table('users')->insert([
'name' => Str::random(10),
'email' => Str::random(10).'@example.com',
'password' => Hash::make('password'),
]);
}
}

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

استفاده از کارخانه های مدل

البته، تعیین دستی ویژگی ها برای هر دانه مدل دست و پا گیر است. در عوض، می‌توانید از کارخانه‌های مدل استفاده کنید تا به راحتی مقادیر زیادی از رکوردهای پایگاه داده را تولید کنید. ابتدا اسناد کارخانه مدل را مرور کنید تا نحوه تعریف کارخانه های خود را بیاموزید.

به عنوان مثال، اجازه دهید 50 کاربر ایجاد کنیم که هر کدام یک پست مرتبط دارند:

use App\Models\User;
 
/**
* Run the database seeders.
*/
public function run(): void
{
User::factory()
->count(50)
->hasPosts(1)
->create();
}

فراخوانی بذرهای اضافی

در داخل DatabaseSeeder کلاس، می توانید از call روش برای اجرای کلاس های seed اضافی استفاده کنید. استفاده از این call روش به شما این امکان را می دهد که بذر پایگاه داده خود را به چندین فایل تقسیم کنید تا هیچ کلاس بذری بیش از حد بزرگ نشود. متد call آرایه ای از کلاس های seeder را می پذیرد که باید اجرا شوند:

/**
* Run the database seeders.
*/
public function run(): void
{
$this->call([
UserSeeder::class,
PostSeeder::class,
CommentSeeder::class,
]);
}

نادیده گرفتن رویدادهای مدل

هنگام اجرای seeds، ممکن است بخواهید از ارسال رویدادها توسط مدل ها جلوگیری کنید. ممکن است با استفاده از این صفت به این هدف برسید WithoutModelEvents . هنگام استفاده، این WithoutModelEvents ویژگی تضمین می‌کند که هیچ رویداد مدلی ارسال نمی‌شود، حتی اگر کلاس‌های seed اضافی از طریق روش زیر اجرا شوند call :

<?php
 
namespace Database\Seeders;
 
use Illuminate\Database\Seeder;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
 
class DatabaseSeeder extends Seeder
{
use WithoutModelEvents;
 
/**
* Run the database seeders.
*/
public function run(): void
{
$this->call([
UserSeeder::class,
]);
}
}

در حال اجرا بذرها

شما می توانید db:seed دستور Artisan را برای نصب پایگاه داده خود اجرا کنید. به‌طور پیش‌فرض، db:seed دستور کلاس را اجرا می‌کند Database\Seeders\DatabaseSeeder ، که به نوبه خود ممکن است کلاس‌های seed دیگر را فراخوانی کند. با این حال، می توانید از این --class گزینه برای تعیین یک کلاس seder خاص برای اجرای جداگانه استفاده کنید:

php artisan db:seed
 
php artisan db:seed --class=UserSeeder

همچنین می‌توانید پایگاه داده خود را با استفاده از migrate:fresh دستور در ترکیب با --seed گزینه‌ای که همه جداول را حذف می‌کند و همه مهاجرت‌های شما را مجدداً اجرا می‌کند، Seed کنید. این دستور برای بازسازی کامل پایگاه داده شما مفید است. این --seeder گزینه ممکن است برای تعیین یک بذر خاص برای اجرا استفاده شود:

php artisan migrate:fresh --seed
 
php artisan migrate:fresh --seed --seeder=UserSeeder

وادار کردن بذرها به فعالیت در تولید

برخی از عملیات کاشت ممکن است باعث تغییر یا از دست دادن داده ها شوند. به منظور محافظت از شما در برابر اجرای دستورات seed در برابر پایگاه داده تولید شما، قبل از اجرای seders در محیط، از شما خواسته می شود تا تأیید کنید production . برای وادار کردن بذرها به اجرای بدون درخواست، از --force پرچم استفاده کنید:

php artisan db:seed --force