دیتابیس: سیدینگ

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

مقدمه

لاراول با استفاده از کلاس‌های سید، روش ساده‌ای برای سیدکردن (خوراندن) داده تست به دیتابیس را ارائه می‌دهد. تمامی کلاس‌های سید در دایرکتوری database/seeds قرار دارند. کلاس‌های سید می‌توانند هر نامی را که می‌خواهید داشته باشند، اما شاید بهتر باشد که کانوِنشِن (الگوی قراردادی) مشخصی مانند UsersTableSeeder و غیره را دنبال کنید. به صورت پیش‌فرض، یک کلاس DatabaseSeeder برای پروژه شما تعریف شده است. داخل این کلاس، با استفاده از متد call می‌توانید سایر کلاس‌های سید را اجرا کنید، که به شما امکان کنترل ترتیب اجرای عملیات سیدینگ را می‌دهد.

نوشتن سیدرها

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

php artisan make:seeder UsersTableSeeder

به صورت پیش‌فرض، هر کلاس سیدر تنها حاوی متد run است. این متد هنگامی که کامند آرتیزان db:seed اجرا شود، فراخوانی می‌شود. داخل متد run، هر داده‌ای که می‌خواهید می‌توانید به دیتابیس خود وارد کنید. با استفاده از کوئری بیلدر و یا الوکوئنت مدل فکتوری، می‌توانید داده‌ها را به صورت دستی به دیتابیس وارد کنید.

Mass assignment protection در هنگام سید کردن داده به دیتابیس به صورت خودکار غیرفعال می‌شود.

به عنوان یک مثال، بیایید کلاس پیش‌فرض DatabaseSeeder را ویرایش کرده و یک دستور ورود داده به دیتابیس را به متد run اضافه کنیم.

<?php

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

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' => bcrypt('secret'),
        ]);
    }
}

هر وابستگی را که می‌خواهید می‌توانید در سیگنِچِر متد run به صورت type-hint تزریق کنید. این وابستگی‌ها به صورت خودکار توسط سرویس کانتینر لاراول ریزالو می‌شوند.

استفاده از مدل فکتوری‌ها

طبیعتا، مشخص کردن اتریبویت‌ها برای تک‌تک سیدهای مدل، کاری خسته کننده است. به جاری اینکار، می‌توانید از مدل فکتوری‌ها برای تولید رکورد دیتابیس به تعداد زیاد استفاده کنید. ابتدا، داکیومنت مدل فکتوری را مطالعه کنید تا نحوه تعریف فکتوری‌ها را یاد بگیرید. هنگامی که فکتوری‌های خود را تعریف کردید، می‌توانید تز هلپر فانکشن factory برای ورود رکوردها به دیتابیس استفاده کنید.

برای مثال، بیایید 50 کاربر بسازیم و به هر کاربر یک ریلیشن‌شیپ اَتَچ کنیم:

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

فراخوانی سیدرهای اضافه

داخل کلاس DatabaseSeeder می‌توانید از متد call برای اجرای کلاس‌های سید اضافه استفاده کنید. با استفاده از متد امکان شکستن سیدینگ دیتابیس به چندین فایل را دارید تا با این کار هیچ کلاس سیدری خیلی بزرگ نشود. نام کلاس سیدری را که می‌خواهید اجرا شود را به این متد ارسال کنید:

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

اجرای سیدرها

هنگامی که سیدرهای خود را نوشتید، ممکن است نیاز به ایجاد مجدد اتولودر کامپوزر داشته باشید، این کار را با کامند dump-autoload می‌توانید انجام دهید.

composer dump-autoload

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

php artisan db:seed

php artisan db:seed --class=UsersTableSeeder

همچنین با استفاده از کامند migrate:refresh که مایگریشن‌های‌تان را رول‌بَک کرده و مجددا اجرا می‌کند، می‌توانید به دیتابیس خود سید بخورانید. این کامند برای ساخت مجدد دیتابیس به صورت کامل سودمند است:

php artisan migrate:refresh --seed

سایر پست‌های داکیومنت

  • پیش‌گفتار
    • Release Notes ترجمه در ورژن‌های بعدی
    • راهنمای آپگرید ترجمه در ورژن‌های بعدی
    • Contribution Guide ترجمه در ورژن‌های بعدی
  • شروع
    • نصب
    • پیکربندی
    • ساختار دایرکتوری ترجمه در ورژن‌های بعدی
    • Laravel Homestead ترجمه در ورژن‌های بعدی
    • Laravel Valet ترجمه در ورژن‌های بعدی
    • دپلویمنت ترجمه در ورژن‌های بعدی
  • مفاهیم معماری
  • اصول اولیه
  • فرانت‌اند
  • امنیت
    • Authentication ترجمه در ورژن‌های بعدی
    • API Authentication (Passport) ترجمه در ورژن‌های بعدی
    • Authorization ترجمه در ورژن‌های بعدی
    • Encryption ترجمه در ورژن‌های بعدی
    • Hashing ترجمه در ورژن‌های بعدی
    • Resetting Passwords ترجمه در ورژن‌های بعدی
  • مباحث عمیق‌تر
    • Artisan Console ترجمه در ورژن‌های بعدی
    • Broadcasting ترجمه در ورژن‌های بعدی
    • Cache ترجمه در ورژن‌های بعدی
    • Collections ترجمه در ورژن‌های بعدی
    • Events ترجمه در ورژن‌های بعدی
    • File Storage ترجمه در ورژن‌های بعدی
    • Helpers ترجمه در ورژن‌های بعدی
    • Mail ترجمه در ورژن‌های بعدی
    • Notifications ترجمه در ورژن‌های بعدی
    • Package Development ترجمه در ورژن‌های بعدی
    • Queues ترجمه در ورژن‌های بعدی
    • Task Scheduling ترجمه در ورژن‌های بعدی
  • دیتابیس
  • Eloquent ORM
    • Eloquent: Getting Started ترجمه در ورژن‌های بعدی
    • Eloquent: Relationships ترجمه در ورژن‌های بعدی
    • Eloquent: Collections ترجمه در ورژن‌های بعدی
    • Eloquent: Mutators ترجمه در ورژن‌های بعدی
    • Eloquent: API Resources ترجمه در ورژن‌های بعدی
    • Eloquent: Serialization ترجمه در ورژن‌های بعدی
  • Testing
    • Testing: Getting Started ترجمه در ورژن‌های بعدی
    • HTTP Tests ترجمه در ورژن‌های بعدی
    • Browser Tests (Laravel Dusk) ترجمه در ورژن‌های بعدی
    • Database Testing ترجمه در ورژن‌های بعدی
    • Mocking ترجمه در ورژن‌های بعدی
  • Official Packages
    • Laravel Cashier ترجمه در ورژن‌های بعدی
    • Envoy Task Runner ترجمه در ورژن‌های بعدی
    • Laravel Horizon ترجمه در ورژن‌های بعدی
    • API Authentication (Passport) ترجمه در ورژن‌های بعدی
    • Laravel Scout ترجمه در ورژن‌های بعدی
    • Laravel Socialite ترجمه در ورژن‌های بعدی