استفاده از Model Factories در لاراول

امید کیانی 986 بازدید 1398/05/18
استفاده از Model Factories در لاراول

faker یک کتابخانه ی php است که دیتای ساختگی یا جعلی برای ما ایجاد می کند.

هنگامی که شما دیتابیس مربوط به پروژه خود را می سازید و جداول مربوط به آن را پیاده سازی می کنید،شما نیاز خواهید داشت که یک سری دیتای ساختگی با توجه به جداول خود داشته باشید.برای همین امر php دارای کتابخانه ای به نام faker است.

چگونه faker را در لاراول پیاده سازی کنیم؟

باید خوشحال باشید چون لاراول به صورت پیش فرض کتابخانه ی faker را به عنوان یک dependency درون خود دارد.همچنین شما می توانید faker را به صورت جداگانه در پروژه ی PHP خود اضافه کنید.

برای انجام این کار از دستور زیر استفاده می کنیم:

composer require fzaninotto/faker

ایجاد یک model factory در لاراول

با استفاده از دستور زیر یک مدل با نام Internet به همراه ماگریشن آن ایجاد می کنیم:

php artisan make:model Internet -m

به مسیر database\migrations رفته و فایل create_internets_table.php را باز می کنیم.

// create_internets_table.php

public function up()
{
    Schema::create('internets', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('safeEmail');
        $table->string('domainName');
        $table->string('url');
        $table->string('ipv6');
        $table->timestamps();
    });
}

با استفاده از دستور زیر جدول خود را می سازیم.

php artisan migrate

 

اکنون می خواهیم یک factory با نام InternetFactory با استفاده از دستور زیر ایجاد کنیم.

php artisan make:factory InternetFactory

فایل InternetFactory.php در مسیر database\factories با حالت پیش فرض که در زیر قرار دارد برای ما ساخته شد.

<?php

// InternetFactory.php

use Faker\Generator as Faker;

$factory->define(Model::class, function (Faker $faker) {
    return [
        //
    ];
});

حال ما نیاز داریم برخی attribute های مربوط به جدول internets را به فایل InternetFactory.php اضافه کنیم:

<?php

// InternetFactory.php

use Faker\Generator as Faker;
use App\Internet;

$factory->define(Internet::class, function (Faker $faker) {
    return [
        'safeEmail' => $faker->safeEmail,
        'domainName' => $faker->domainName,
        'url' => $faker->url,
        'ipv6' => $faker->ipv6
    ];
});

 faker->safeEmail$: یک ایمیل جعلی می سازد.

faker->domainName$ : یک دامنه ی جعلی می سازد.

faker->url$: یک url جعلی می سازد.

faker->ipv6$: یک آدرس IPV6 می سازد.

 Laravel Database Seeding

مرحله ی بعدی ساخت یک seeder با استفاده از دستور زیر است:

php artisan make:seeder InternetsTableSeeder

این فایل در مسیر database\seeds برای ما ایجاد شده و در آن رکورهای fake را ایجاد می کنیم،مانند زیر:

<?php

// InternetsTableSeeder.php

use Illuminate\Database\Seeder;
use App\Internet;

class InternetsTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $count = 100;
        factory(Internet::class, $count)->create();
    }
}

کد بالا ۱۰۰ رکورد در جدول intenets برای ما می سازد.

اکنون زمان آن است که seeder خود را اجرا کنیم،برای این کار فایل DatabaseSeeder.php را مسیر database\seeds باز کرده و کد زیر را درون آن می نویسیم.

<?php

// DatabaseSeeder.php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        $this->call(InternetsTableSeeder::class);
    }
}

ما نیاز داریم که composer را به صورت خودکار اجرا کنیم:

composer dump-autoload

حال دستور زیر را وارد کرده تا تغییرات ما اعمال شود.

php artisan db:seed

به همین راحتی با دستور بالا ۱۰۰ رکورد در جدول intenets به شکل زیر برای ما ایجاد شد.

 به همین راحتی ما توانستیم دیتای fake را با استفاده کتابخانه ی faker و ویژگی Model Factory در لاراول ایجاد کنیم.

 

دیگر مقالات
حمید تیموری 973 بازدید 1397/04/18
امید کیانی 770 بازدید 1398/07/16
حمید تیموری 1023 بازدید 1397/05/07
حمید تیموری 2086 بازدید 1397/05/09
امید کیانی 624 بازدید 1398/06/11


نظرات (1)
بردیا مظاهری
1398/06/11 - 19:00
ممنونم
امید کیانی
1398/06/12 - 08:57
خواهش می کنم.
برای ثبت نظر ابتدا وارد سایت شوید