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