«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как легко генерировать данные с помощью сидеров баз данных в Laravel

Как легко генерировать данные с помощью сидеров баз данных в Laravel

Опубликовано 31 июля 2024 г.
Просматривать:361

How to easily generate data with Database Seeders in Laravel

При создании приложения, будь то маленькое, среднее или большое. Наличие тестовых данных для экспериментов в приложении неизбежно и важно.

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

я. У всех приложений или большинства приложений должны быть пользователи. Иногда мы хотим классифицировать/помечать пользователей как Администраторы или обычные Пользователи. Итак, давайте создадим простую сеялку со 100 пользователями с указанными ниже спецификациями таблицы:

  • Идентификатор, имя, фамилия, адрес электронной почты, пароль
  • Тип пользователя: либо Администратор либо обычный Пользователь

Итак, начнём.

Чтобы заполнить таблицу users, конечно, вам понадобится таблица миграции пользователей по умолчанию, созданная для вас Laravel.

Итак, для этой демонстрации миграция вашей таблицы должна выглядеть так:

public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->string('email');
            $table->string('password');
            $table->enum('user_type', ['user','admin'])->default('user');
            $table->rememberToken();
            $table->timestamps();
        });
    }

Чтобы создать класс раздачи для нашей таблицы пользователей.

php artisan make:seeder UserSeeder

Итак, чтобы создать значения для только что созданной системы раздачи, нам нужно использовать пакет Faker по умолчанию, который поставляется с каждым приложением Laravel.

Чтобы создать 100 пользователей за раз, мы сначала выполняем цикл for и передаем поддельные/псевдоданные в каждый столбец следующим образом:

use Faker\Factory as Faker;

public function run()
{
   $faker = Faker::create();

   for(i = 0; i  $faker->firstName(),
        'last_name' => $faker->lastName(),
        'email' => $faker->email(),
        'password' => bcrypt('hello1234'), // we might want to set this to a value we can easily remember for testing sake
        'user_type' => $faker->randomElement(['admin', 'user'])
      ]);
   }
}

Чтобы внести это в базу данных, нам нужно запустить команду ниже:

php artisan db:seed --class=UserSeeder

Это создаст 100 пользователей и вставит их в базу данных.

Это так просто.

Итак, переходим к более продвинутому решению.

Нам нужно создать:

  • Таблица отделов с 10 новыми отделами.
  • Мы создадим 100 новых пользователей.
  • Таблица персонала, которая будет ссылаться на таблицу пользователей с теми же данными и дополнительным столбцом для ссылки на таблицу отделов, т. е. Department_id.

Мы уже знаем, как будет выглядеть таблица пользователей, давайте посмотрим, как будут выглядеть таблицы сотрудников и отделов.

Таблица персонала

Schema::create('staff', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->string('email');
            $table->foreignId('department_id')->references('id')->on('departments');
            $table->foreignId('user_id')->references('id')->on('users');
            $table->timestamps();
        });

Таблица отделов:

Schema::create('departments', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->timestamps();
        });

Поэтому нам нужно запустить миграцию, чтобы эти таблицы были в нашей базе данных.

Теперь для класса UserSeeder мы должны реализовать пункты, изложенные ранее.

  • Таблица отделов с 10 новыми отделами.
$now = now();
        $count = 0;
        $departmentNames = ['Electronics', 'Home & Garden', 'Toys & Games', 'Health & Beauty', 'Automotive', 'Sports & Outdoors','Clothing & Accessories',
            'Books', 'Music', 'Movies & TV', 'Grocery'
        ];

        for ($j=0; $j  $departmentNames[$j],
                'created_at' => $now,
                'updated_at' => $now,
            ]);
            $count  ;
        }

Последние два пункта необходимо реализовать вместе

  • Мы создадим 100 новых пользователей
  • Таблица персонала, которая будет ссылаться на таблицу пользователей с теми же сведениями и дополнительным столбцом для ссылки на таблицу отделов, т.е. Department_id.
if ($count == 10) { // we need to make sure we have all 10 departments
            $departments = Department::pluck('id')->toArray();

            for ($i=0; $i  $faker->firstName(),
                    'last_name' => $faker->lastName(),
                    'email' => $faker->email(),
                    'password' => bcrypt('hello1234'),
                    'user_type' => $faker->randomElement(['admin', 'user']),
                    'created_at' => $now,
                    'updated_at' => $now
                ]);

                Staff::create([
                    'first_name' => $user->first_name,
                    'last_name' => $user->last_name,
                    'email' => $user->email,
                    'user_id' => $user->id,
                    'department_id' => $faker->randomElement($departments), // pick random departments from DB
                    'created_at' => $now,
                    'updated_at' => $now
                ]);
            }
}

Объяснение:

  • Сначала мы создали 10 отделов.

  • Затем мы настраиваем счетчик, чтобы проверить, все ли 10 отделов созданы.

  • Если условие счетчика истинно, мы создаем 100 пользователей.

  • Для каждого из этих 100 пользователей нам необходимо сослаться на их данные в другой таблице, называемой таблицей персонала.

  • Каждый сотрудник должен принадлежать пользователю, а также отделу, поэтому для этого нам нужно получить все отделы, которые мы создали ранее, и вставить их в столбец Department_id случайным образом.

Полная реализация UserSeeder

        $now = now();
        $count = 0;
        $departmentNames = ['Electronics', 'Home & Garden', 'Toys & Games', 'Health & Beauty', 'Automotive', 'Sports & Outdoors','Clothing & Accessories',
            'Books', 'Music', 'Movies & TV', 'Grocery'
        ];

        for ($j=0; $j  $departmentNames[$j],
                'created_at' => $now,
                'updated_at' => $now,
            ]);
            $count  ;
        }

        $faker = Faker::create();
        if ($count == 10) {
            $departments = Department::pluck('id')->toArray();

            for ($i=0; $i  $faker->firstName(),
                    'last_name' => $faker->lastName(),
                    'email' => $faker->email(),
                    'password' => bcrypt('hello1234'),
                    'user_type' => $faker->randomElement(['admin', 'user']),
                    'created_at' => $now,
                    'updated_at' => $now
                ]);

                Staff::create([
                    'first_name' => $user->first_name,
                    'last_name' => $user->last_name,
                    'email' => $user->email,
                    'user_id' => $user->id,
                    'department_id' => $faker->randomElement($departments), // pick random departments from DB
                    'created_at' => $now,
                    'updated_at' => $now
                ]);
            }
        }

Затем запустите:

php artisan make:seeder --class=UserSeeder

Если у вас есть вопросы, не стесняйтесь задавать их. Приятного кодирования!

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/adetolaaremu/how-to-easily-generate-data-with-database-seeders-in-laravel-1kg6?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с Study_golang@163. .com, чтобы удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3