Наполнение Laravel 8 тестовыми данными

14.12.2020

Часто для тестов и/или демонстрации необходимо создать несколько тестовых записей. И желательно чтобы они был человеко читаемыми, а не набором символов.

Для этого в Laravel есть заводы (Model factory) и пакет Faker

Есть отдельная статья для Laravel 6 и 7

Внимание: Если у Вас еще нет модели, для которой и будут генерироваться данные, то сначала ознакомиться со статьей.

Для начала нужно сдать фабрику:

 
php artisan make:factory PostFactory --model=Post 

В ней будем задать какие поля и как нужно заполнять фейкеру:

 
<?php

namespace Database\Factories;

use App\Models\Post;
use Illuminate\Database\Eloquent\Factories\Factory;

class PostFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = Post::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            'title' => $this->faker->sentence(5),
            'img' => '/img/blank.jpg',
            'text' => $this->faker->text,
            'published' => $this->faker->numberBetween(0, 1),
            'category_id' => $this->faker->numberBetween(1, 10),
            'date' => $this->faker->date('Y-m-d', 'now'),
        ];
    }
}

Есть несколько способов как можно запустить создание тестовых записей, мы рассмотреть самый простой - запуск через tinker (шел для выполнения php кода):

 
php artisan tinker

Затем, , после получения приглашения, выполняем:

 
App\Models\Post::factory()->count(10)->create();

- где 10, это количество записей которые нужно создать.

Более подробно можно ознакомиться на странице документации Laravel 8: database testing


Категории: Laravel
Пометки: Model factory Faker Laravel
Яндекс.Метрика