استفاده از seed ها در لاراول

laravel seeder
laravel seeder

لاراول همچنین از یک روش ساده برای پرکردن اطلاعات تستی در جداول شما استفاده میکنند . تمامی کلاس های seed شما در مسیر database/seeds ذخیره میشوند ، میتوانید برای کلاس های seed از هر نامی استفاده نمایید اما از قواعد نامگذاری لاراول نیز باید پیروی کنید .

که این قانون به شما میگویید که برای نام گذاری seed ها اول اسم جدول سپس کلمه table سپس کلمه seeder استفاده کنید برای مثال UsersTableSeeder

به منظور ایجاد کلاسseeder، لازم است دستور زیر را در cmd بنویسید

php artisan make:seeder    نام seed

به صورت پیش فرض، کلاس seeder تنها یک متد به نام run را شامل می شود .در بدنه ی متدrun می توان داده های مورد نظر را به روش دلخواه در پایگاه داده درج کرد.داده ها را می توان به صورت دستی با بهره گیری از query builder وارد پایگاه داده کرد یا آن ها را به وسیله ی Eloquent model factory در داخل بانک اطلاعاتی درج نمود.
در زیر کلاس پیش فرضDatabaseSeeder که با نصب Laravel آماده در اختیار برنامه نویس قرار می گیرد را ویرایش می کنیم. برای این منظور یک دستور insert ساده به متد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).'ادرس ایمیل',
'password' => Hash::make('پسورد'),
]);
}
}

در این کد ما از DB و hashوstr استفاده کردیم پس باید دستور use آن ها را در بالا بنویسیم

سپس در متد run گفته ایم در تیبل users به صورت رندم نام و ایمیل و پسورد تولید کند به صورت string و برای پسورد برای رمزنگاری آن که راحت هک نشود از کلاس hash با متد make استفاده کردیم

فراخوانی کلاس های Seeder بیشتر

متد call را در کلاس DatabaseSeeder برای اجرای دیگر کلاس های seed فراخوانی کنید. فراخواندن این متد سبب می شود کلاس هایseedبه فایل های متعدد کوچکتر تقسیم شده و هیچ یک از کلاس ها بیش از حد بزرگ نشود.
کافی است اسم کلاسseeder مورد نظر را بهrun پاس دهید به طور مثال:

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

وقتی کهseeder خود را نوشتید ممکن است لازم باشدautoloader composer خود را بازسازی کنید در ان زمان ازدستور زیر در cmd استفاده میکنید

composer dump - autoload

پس از تعریف کلاس هایseeder، می توانید دستور آرتیزانdb:seed را برای داده ریزی (قرار دادن داده های آزمایشی) در پایگاه داده اجرا کنید.

کلاس DatabaseSeeder را اجرا می کند که به واسطه ی آن تمامی دیگر کلاس های seed نیز فراخوانده می شوند.

php artisan db:seed

می توان این کلاس ها را به صورت منفرد هم اجرا کرد. برای نیل به این هدف لازم است گزینه ی --class را با اسم کلاس دلخواه مقداردهی نمایید:

php artisan db:seed --class=UserTableSeeder

می توانید پایگاه داده ی خود را با فراخوانی دستور migrate:refresh با داده های آزمایشی پر کرده، بعلاوه آن را یکجا به پیش از اعمال آخرین تغییرات برگردانید (rollback) و نیز تمامی migration های خود را مجددا اجرا کنید. استفاده از این دستور بیشتر زمانی توصیه می شود که بخواهید یک پایگاه داده را کاملا از نو بسازید:

php artisan migrate:fresh --seed

برای دانستن اطلاعات بیشتر در مورد db:seed میتوانید در cmd دستور زیر را بزنید

php artisan help db:seed

این دستور help به شما اپشن های بیشتر برای استفاده را به شما نشان میدهد

Options:
      --class[=CLASS]               The class name of the root seeder [default: &quotDatabaseSeeder&quot]
  --database[=DATABASE]      The database connection to seed
      --force                               Force the operation to run when in production
  -h, --help                                Display this help message
  -q, --quiet                               Do not output any message
  -V, --version                           Display this application version
      --ansi                                 Force ANSI output
      --no-ansi                            Disable ANSI output
  -n, --no-interaction                Do not ask any interactive question
  --env[=ENV]                          The environment the command should run under
  -v|vv|vvv, --verbose               Increase the verbosity of messages: 1 for normal output, 2 for 
                                               more verbose output and 3 for debug

منبع: https://laravel.com/docs/7.x/seeding