В Laravel сидеры (seeders) и фабрики (factories) играют важную роль в создании и наполнении базы данных тестовыми данными. Давайте рассмотрим, как создать сидер и фабрику для заполнения таблицы тестовыми постами в нашем блоге.
Создание сидера
Сначала создадим сидер с помощью Artisan:
php artisan make:seeder PostsTableSeeder
Эта команда создаст файл PostsTableSeeder.php в директории database/seeders. Внутри этого файла определим, какие данные мы хотим добавить:
// database/seeders/PostsTableSeeder.php
use Illuminate\Database\Seeder;
use App\Models\Post;
class PostsTableSeeder extends Seeder
{
public function run()
{
// Используем фабрику для создания десяти тестовых постов
Post::factory()->count(10)->create();
}
}
Создание фабрики
Теперь создадим фабрику для определения структуры наших тестовых постов. Запустим команду:
php artisan make:factory PostFactory
Эта команда создаст файл PostsTableSeeder.php в директории database/factories. Внутри файла определим структуру постов:
// database/factories/PostFactory.php
// Импорт модели Post и базового класса Factory
use App\Models\Post;
use Illuminate\Database\Eloquent\Factories\Factory;
class PostFactory extends Factory
{
// Задаем модель, с которой будет связана фабрика
protected $model = Post::class;
// Определяем структуру данных для создания тестового поста
public function definition()
{
return [
'title' => $this->faker->sentence, // Генерация случайного заголовка
'content' => $this->faker->paragraph, // Генерация случайного содержания
];
}
}
Запуск сидера
Теперь давайте запустим наш сидер, чтобы добавить тестовые данные в базу данных:
php artisan db:seed --class=PostsTableSeeder
Сидер использует фабрику для создания десяти тестовых постов и наполняет таблицу «posts».
Теперь при запросе к http://127.0.0.1:8000/posts/ выдается список постов:
А при запросе к http://127.0.0.1:8000/posts/3 отображается третий пост: