پایگاه داده: بذر
معرفی
لاراول شامل توانایی دانه بندی پایگاه داده شما با داده ها با استفاده از کلاس های 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