Наполняем БД тестовыми данными на PHP за 5 минут

Для разработки сайтов программисту почти всегда нужны тестовые данные. Иногда бывает так, что данные нужны в большом количестве и разного качества. Я поделюсь небольшим рецептом заполнения БД любой информацией на PHP за 5 минут. В качестве основного генератора данных мы будем использовать библиотеку Faker, которая поддерживает ru_RU локализацию. Для доступа к БД я возьму RedBeanPHP — это простая ORM-библиотека, позволяющая быстро вставлять данные налету. Такая комбинация инструментов хороша когда данные не обязательно должны быть уникальными и программисту, возможно, ещё до конца неизвестна структура БД.

Сам по себе процесс наполнения базы ни в коем случае не должен влиять на бизнес-логику приложения. Внося данные в базу нужно пропускать их через модели своего приложения, чтобы исключить конфликтные ситуации.

Мы специально опустим это правило в целях демонстрации процесса и сэкономим немного времени, чтобы пройтись по ключевым возможностям Faker и RedBeanPHP. Предположим программисту нужно быстро запостить фейковые данные о пользователях. Ничего сложного, но давайте для начала установим наши библиотеки. Сделаем это через Composer:

> composer require fzaninotto/faker gabordemooij/redbean

После установки пакетов нам нужен обработчик. Предлагаю создать обычный PHP-файл и написать там всю логику. Мне кажется это самый простой способ продемонстрировать работоспособность метода. Ниже привожу листинг с комментариями, где указано как подключить наши библиотеки в скрипте.

<?php

// Подключим автозагрузку классов
require 'vendor/autoload.php';

// Объявим неймспейсы
use Faker\Factory as Faker;
use RedBeanPHP\R  as RedBean;

// Запишем экземпляр класса Faker\Factory в переменную
$faker = Faker::create('ru_RU');

// Подключаемся к БД как в PDO
RedBean::setup('mysql:host=localhost;dbname=faker', 'root', '');

/* ... */

Когда всё подключено, можно приступить к генерации данных. Поскольку мы создали экземпляр класса Faker\Factory через статический метод create('ru_RU') с русской локализацией, то теперь все сгенерированные данные для наших фейковых пользователей будут на русском языке. Библиотека предлагает достаточно много генераторов данных, но давайте посмотрим как их получить для нашего примера.

<?php

/* ... */

// Создадим ассоциативный массив, где
// укажем рандомные данные о пользователе
// с помощью Faker
$data = [
    'login'     => $faker->userName,
    'password'  => password_hash($faker->md5, PASSWORD_DEFAULT),
    'firstName' => $faker->firstNameMale,
    'lastName'  => $faker->lastName,
    'email'     => $faker->email,
];

Это произвольные данные для примера, но вы можете сотавить более сложные согласно своей задаче используя все возможности Faker. Теперь эти данные нужно пропустить через свою модель в приложении и сохранить. В качестве такой у нас выступает RedBeanPHP без различных валидаций и прочей логики. Допустим у нас в БД ещё нет таблицы users и её нужно заполнить. RedBeanPHP позволяет добавлять данные налету, т. е. нет необходимости заранее создавать структуру таблиц. Она сама создаст таблицу со всеми нужными полями. Это основное преимещество RedBeanPHP, которое ускоряет работу с БД. На примере это выглядит так:

<?php

/* ... */

// Создаём молель с именем users
$user = RedBean::dispense('users');

// В стиле ActiveRecord присваиваем наши значения
foreach ($data as $key => $value) {
    $user->{$key} = $value;
}

// Сохраняем модель в БД
RedBean::store($user);

Если нужно добавить сразу несколько пользователей в БД, тогда оберните всё логику в цикл for и укажите количество итераций. На этом весь рецепт быстрого добавления данных в БД заканчивается. По существу мы не написали ни одного SQL-запроса, даже не открыли PhpMyAdmin, но на выходе получили заполненую таблицу с нужными нам полями. Вот такую таблицу сгенерировал RedBeanPHP:

Для чтения или модификации данных можно использовать RedBeanPHP, т. к. он заточен под CRUD-операции, умеет работать с множественными таблицами, интегрируется в свои модели как полноценная ORM. Этого достаточно для быстрого доступа к БД и вывода данных.

Поделиться
Отправить
1 комментарий
seoonly.ru

Удобненько!

Популярное