نسخه:

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

معرفی

لاراول شامل یک روش ساده برای کاشت پایگاه داده شما با داده های آزمایشی با استفاده از کلاس های seed است. تمام کلاس های seed در database/seeds دایرکتوری ذخیره می شوند. کلاس‌های Seed ممکن است هر نامی که شما می‌خواهید داشته باشند، اما احتمالاً باید از یک قرارداد معقول مانند UserSeeder و غیره پیروی کنند. به طور پیش‌فرض، یک DatabaseSeeder کلاس برای شما تعریف شده است. از این کلاس، می‌توانید از call روش برای اجرای سایر کلاس‌های seed استفاده کنید که به شما امکان می‌دهد ترتیب دانه‌بندی را کنترل کنید.

بذرهای نوشتن

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

php artisan make:seeder UserSeeder

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

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

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

<?php
 
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 seeds.
*
* @return void
*/
public function run()
{
DB::table('users')->insert([
'name' => Str::random(10),
'email' => Str::random(10).'@gmail.com',
'password' => Hash::make('password'),
]);
}
}

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

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

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

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

/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
factory(App\User::class, 50)->create()->each(function ($user) {
$user->posts()->save(factory(App\Post::class)->make());
});
}

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

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

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

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

وقتی seder خود را نوشتید، ممکن است لازم باشد با استفاده از dump-autoload دستور زیر، Autoloader Composer را بازسازی کنید:

composer dump-autoload

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

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

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

php artisan migrate:fresh --seed

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

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

php artisan db:seed --force