Настало время заполнить наши созданные таблицы тестовыми данными, для этого в Laravel существуют сиды или как правильно их называть seeding.
Классы для работы с этими сидами располагаются по адресу: database\seeds. Откройте в этой папке файл DatabaseSeeder.php
В этом файле мы будем прописывать запуск всех наших сидов и фабрик о которых мы поговорим чуть позже.
Отредактируем этот файл раскоментировав строчку $this->call(UsersTableSeeder::class); если у вас этой строчки нет, добавьте ее в метод run
Теперь создадим наши первый сиды, вот такими командами:
php artisan make:seeder UsersTableSeeder php artisan make:seeder BlogCategoriesTableSeeder
Откройте файл database\seeds\UsersTableSeeder.php и вставьте в него следующий код:
<?php use Illuminate\Database\Seeder; class UsersTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $data = []; $data [] = [ 'name'=>'Админ', 'email'=>'admin@testmailg.ru', 'password'=>bcrypt('qwerty1234'), ]; for($i = 2; $i<=5; $i++){ $data [] = [ 'name'=>'Пользователь '.$i, 'email'=>'ueser'.$i.'@testmailg.ru', 'password'=>bcrypt(str_random(16)), ]; } DB::table('users')->insert($data); } }
Таким образом, когда мы запустим сиды у нас появится 5 пользователей, у одного мы будем знать пароль это qwerty1234 и под ним мы будем авторизовываться у других это будет случайный пароль.
Теперь добавим код в файл database\seeds\BlogCategoriesTableSeeder.php
<?php use Illuminate\Database\Seeder; class BlogCategoriesTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $categories = []; $cName = "Без категории"; $categories[] = [ 'title' => $cName, 'slug' => str_slug($cName), 'parent_id' => 0 ]; for($i = 1; $i<=15; $i++){ $cName = "Категория №".$i; $parent_id = ($i>7) ? rand(1,7) : 1; $categories[] = [ 'title' => $cName, 'slug' => str_slug($cName), 'parent_id' => $parent_id ]; } \DB::table('blog_categories')->insert($categories); } }
Тут мы делаем первую категорию, на которую можно будет ссылаться, а потом запускаем цикл и создаем 15 категорий, при этом как вы наверное догадались из кода то когда счетчик в нашем цикле перевалит за 7, то id родительской категории будет ставиться случайным образом от 1 до 7.
Добавьте в файл database\seeds\DatabaseSeeder.php в метод run() строчку $this->call(BlogCategoriesTableSeeder::class);
Прежде чем запустить сиды, создадим фабрику для наполнения нашей таблицы с постами блога.
Фабрики очень удобны для генерации больших объемов информации. Откройте папку database\factories и создайте файл BlogPostFactory.php со следующим кодом:
<?php use Faker\Generator as Faker; /* |-------------------------------------------------------------------------- | Model Factories |-------------------------------------------------------------------------- | | This directory should contain each of the model factory definitions for | your application. Factories provide a convenient way to generate new | model instances for testing / seeding your application's database. | */ $factory->define(App\Models\BlogPost::class, function (Faker $faker) { $title = $faker->sentence(rand(3,8), true); $txt = $faker->realText(rand(1000,3000)); $isPublished = rand(1,5) > 1; $createdAt = $faker->dateTimeBetween('-3 months','-2 months'); $data = [ 'category_id' => rand(1,16), 'user_id' => 1, 'title' => $title, 'slug' => str_slug($title), 'excerpt' => $faker->text(rand(40,100)), 'content_raw' => $txt, 'content_html' => $txt, 'is_published' => $isPublished, 'published_at' => $isPublished ? $faker->dateTimeBetween('-2 months','-1 days'):null, 'created_at' => $createdAt, 'updated_at' => $createdAt, ]; return $data; });
Расскажу подробнее о том, что тут происходит. В столбец category_id мы пишем случайный id нашей категории. В столбец user_id, мы поставили единицу, таким образом все посты у нас созданны тем пользователем, от которого у нас есть пароль.
В столбец excerpt мы добавляем случайный текст от 40 до 100 символов.
В столбец content_raw и content_html мы добавялем реальный текст от 1000 до 3000 символов.
Столбец is_published обычно будет в значении 1 и иногда будет встречаться 0 и в зависимости от этого столбец published_at будет заполнен датой от двух месяцев назад до одного дня назад или же будет null в том случае, если пост еще не опубликован.
Столбцы created_at и updated_at будут заполнены датой от 3 до 2 месяцев назад.
У ларавеля есть много своих функций и некоторые из них могут помочь вам для задания значений полей в вашей фабрике. Информацию по этим функциям лучше всего искать в документации ларавеля.
Теперь у нас практически все готово для запуска сидов, осталось прописать в database\seeds\DatabaseSeeder.php нашу фабрику с постами, добавив следующую строчку factory(\App\Models\BlogPost::class, 150)->create(); в метод run. В результате файл DatabaseSeeder.php будет иметь такой вид:
<php use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * Seed the application's database. * * @return void */ public function run() { $this->call(UsersTableSeeder::class); $this->call(BlogCategoriesTableSeeder::class); factory(\App\Models\BlogPost::class, 150)->create(); } }
Обратите внимание, что мы указали количество наших постов 150 штук. Теперь запустим наши сиды командой:
php artisan db:seed
У вас должна появится надпись Seeding: UsersTableSeeder Seeding: BlogCategoriesTableSeeder и надпись Database seeding completed succesfully.
Зайдите в вашу базу данных и посмотрите, какие тестовые данные появились в таблице users, blog_categories и blog_posts.
В следующем уроке мы поговорим о маршрутизации и выведем посты нашего блога на страницу.