Faker в Laravel
Seeding, также известный как заполнение базы данных, представляет собой процесс генерации mock(фиктивных) данных в базе данных вашего приложения. Будь то для целей тестирования или других случаев использования, заполнение может быть очень полезным, когда мы не хотим начинать с чистого листа или добавлять фиктивные данные вручную.
Что такое Faker?
Faker — это пакет, который позволяет вам генерировать различные типы случайных данных, которые соответствуют схеме вашей базы данных. От простых имен, имен пользователей и случайных чисел до данных кредитных карт (разумеется, поддельных) — вы можете генерировать практически любой тип поддельных данных в базе данных вашего приложения.
Подключение базы данных
Чтобы подключить базу данных к приложению Laravel, вам понадобится база данных SQL: либо локальная, например PHPMYADMIN, которую мы будем использовать в этом руководстве.
Чтобы подключить базу данных, вам сначала нужно создать базу данных с нужным вам именем. В нашем случае мы создадим базу данных с именем testapp
внутри PHPMYADMIN GUI следующим образом:
После этого откройте .env
файл в редакторе и заполните следующие значения учетными данными вашей базы данных:
DB_CONNECTION= DB_HOST= DB_PORT= DB_DATABASE= DB_USERNAME= DB_PASSWORD=
Вот и все! Вы подключили свое приложение Laravel к базе данных SQL. Теперь осталось сгенерировать необходимые файлы.
Создание файлов модели, миграции и фабрики
Поскольку создатели Laravel очень заинтересованы в производительности разработчиков, Laravel поддерживает Faker из коробки, что означает, что вам не нужно будет устанавливать его. После установки, следующим шагом будет генерация файлов модели, миграции и фабрики. В этом руководстве я буду работать с моделью поста, поэтому я запущу следующую команду, чтобы сгенерировать три файла одновременно:
php artisan make:model Post -m --factory
Это должно сгенерировать модель Post внутри app/models
, класс фабрики внутри database/factories
и файл миграции внутри database/migrations
.
Модель Post
Наша таблица постов будет содержать следующие столбцы title, body, likes, author, draft
, поэтому мы добавим $fillable
массив в свой /App/Models/Post.php
файл следующим образом:
protected $fillable = ['title', 'body', 'likes', 'author', 'draft'];
Следующее, что нужно сделать, — это определить Post
схему.
Миграция Post
Чтобы определить, как должна выглядеть ваша схема и какие типы данных она должна содержать, вам нужно открыть вашу /database/migrations/2024_01_21_211528_create_posts_table.php
(имя вашего файла будет другим) и внутри up
функции вам нужно определить вашу схему, для нашей Post
таблицы это будет выглядеть так:
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->longText('body');
$table->string('author');
$table->integer('likes');
$table->boolean('draft');
$table->timestamps();
});
}
После этого нам нужно структурировать то, как Faker будет генерировать ваши данные внутри класса Factory, который вы сгенерировали ранее.
Класс «Factory»
Чтобы Faker правильно сгенерировал ваши данные, вам необходимо явно определить, как это следует делать внутри функции definition
, сгенерированной внутри database/factories/PostFactory.php
файла. Вам просто нужно отредактировать ее в соответствии с вашими столбцами и их типами. В нашем случае мы отредактируем ее так, чтобы она выглядела следующим образом:
public function definition()
{
return [
'title' => $this->faker->words(5, true),
'body' => $this->faker->sentence(45),
'likes' => $this->faker->randomNumber(5),
'author' => $this->faker->name(),
'draft' => $this->faker->boolean()
];
}
Вышеуказанная функция сгенерирует:
title
- 5 словbody
- 45 предложенийlikes
- случайные 5-значные числаauthor
- случайное нигерийское имяdraft
- случайное логическое значение 1 или 0 (1 —true
, а 0 —false
).
Обратите внимание, как мы опустили id
и timestamps
поскольку они будут сгенерированы автоматически. Далее вам нужно подключить PostFactory
к Post
модели, добавив следующую строку в начало файла фабрики, например:
namespace Database\Factories;
use App\Models\Post;
// other dependencies
class PostFactory extends Factory
{
protected $model = Post::class;
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
// same as above
}
}
Запустить класс фабрики через DatabaseSeeder.php
файл
После определения функции определения внутри класса фабрики, следующее, что вам нужно сделать, это добавить вновь созданную фабрику внутрь /database/seeders/DatabaseSeeder.php
файла, добавив ее внутрь метода run следующим образом:
\App\Models\Post::factory(200)->create();
Число 200 в строке кода выше определяет, сколько сообщений вы хотите сгенерировать.
Запустите миграции и seeder
После успешного завершения всех вышеперечисленных шагов вам нужно будет запустить миграции и seeder, а благодаря замечательному инструменту командной строки Laravel мы можем сделать и то, и другое с помощью всего одной команды, например:
php artisan migrate --seed
После успешного выполнения вы увидите в командной строке что-то вроде следующего:
Затем перейдите в менеджер баз данных, чтобы увидеть результат; вы должны увидеть что-то похожее на скриншот ниже:
Таблица post
была успешно создана, включая таблицы Laravel по умолчанию. Обратите внимание на маленький зеленый квадратик?, это наша posts
таблица, содержащая 200 строк данных, сгенерированных Faker!, щелкните по таблице, чтобы увидеть ее содержимое:
Это наша таблица постов, заполненная данными!
Генерация локальных данных
Обратите внимание, что столбец авторов содержит случайные нигерийские имена? Это еще одна замечательная вещь в Faker, он позволяет вам генерировать локальные данные, где это возможно, и все, что вам нужно сделать, это установить faker_locale
внутри config/app.php
предпочитаемую вами страну.
Заключение
Добавление фиктивных данных вручную для тестирования вашего приложения может оказаться сложной задачей. Поэтому в этом руководстве вы узнали, как добавлять данные в базу данных приложения Laravel с помощью Faker.