• Время чтения ~6 мин
  • 23.05.2023

Такие фреймворки, как Laravel и Ruby on Rails, устраняют бесчисленные решения, которые в противном случае были бы вынуждены принимать при создании веб-приложений. Тем не менее, много времени тратится на рутинные задачи, а не на создание интеллектуальной собственности, которая делает приложение уникальным. Одна из таких задач связана с созданием начальных файлов базы данных. В этом посте я покажу вам, как вы можете использовать ChatGPT для создания как статических, так и динамических начальных файлов базы данных и быстрого заполнения базы данных разработки реалистичными данными.

Что такое начальный файл базы данных?

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

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

<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\State;
class StateSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        State::truncate();
        $states = [
            ["name" => "Alabama", "abbreviation" => "AL"],
            ["name" => "Alaska", "abbreviation" => "AK"],
            ["name" => "Arizona", "abbreviation" => "AZ"],
            ["name" => "Arkansas", "abbreviation" => "AR"],
            ["name" => "California", "abbreviation" => "CA"],
            ["name" => "Colorado", "abbreviation" => "CO"],
            ["name" => "Connecticut", "abbreviation" => "CT"],
            ["name" => "Delaware", "abbreviation" => "DE"],
            ["name" => "District of Columbia", "abbreviation" => "DC"],
            ["name" => "Florida", "abbreviation" => "FL"],
            ["name" => "Georgia", "abbreviation" => "GA"],
            ["name" => "Hawaii", "abbreviation" => "HI"],
            ["name" => "Idaho", "abbreviation" => "ID"],
            ["name" => "Illinois", "abbreviation" => "IL"],
            ["name" => "Indiana", "abbreviation" => "IN"],
            ["name" => "Iowa", "abbreviation" => "IA"],
            ["name" => "Kansas", "abbreviation" => "KS"],
            ["name" => "Kentucky", "abbreviation" => "KY"],
            ["name" => "Louisiana", "abbreviation" => "LA"],
            ["name" => "Maine", "abbreviation" => "ME"],
            ["name" => "Maryland", "abbreviation" => "MD"],
            ["name" => "Massachusetts", "abbreviation" => "MA"],
            ["name" => "Michigan", "abbreviation" => "MI"],
            ["name" => "Minnesota", "abbreviation" => "MN"],
            ["name" => "Mississippi", "abbreviation" => "MS"],
            ["name" => "Missouri", "abbreviation" => "MO"],
            ["name" => "Montana", "abbreviation" => "MT"],
            ["name" => "Nebraska", "abbreviation" => "NE"],
            ["name" => "Nevada", "abbreviation" => "NV"],
            ["name" => "New Hampshire", "abbreviation" => "NH"],
            ["name" => "New Jersey", "abbreviation" => "NJ"],
            ["name" => "New Mexico", "abbreviation" => "NM"],
            ["name" => "New York", "abbreviation" => "NY"],
            ["name" => "North Carolina", "abbreviation" => "NC"],
            ["name" => "North Dakota", "abbreviation" => "ND"],
            ["name" => "Ohio", "abbreviation" => "OH"],
            ["name" => "Oklahoma", "abbreviation" => "OK"],
            ["name" => "Oregon", "abbreviation" => "OR"],
            ["name" => "Pennsylvania", "abbreviation" => "PA"],
            ["name" => "Rhode Island", "abbreviation" => "RI"],
            ["name" => "South Carolina", "abbreviation" => "SC"],
            ["name" => "South Dakota", "abbreviation" => "SD"],
            ["name" => "Tennessee", "abbreviation" => "TN"],
            ["name" => "Texas", "abbreviation" => "TX"],
            ["name" => "Utah", "abbreviation" => "UT"],
            ["name" => "Vermont", "abbreviation" => "VT"],
            ["name" => "Virginia", "abbreviation" => "VA"],
            ["name" => "Washington", "abbreviation" => "WA"],
            ["name" => "West Virginia", "abbreviation" => "WV"],
            ["name" => "Wisconsin", "abbreviation" => "WI"],
            ["name" => "Wyoming", "abbreviation" => "WY"]
        ];
        DB::table('states')->insert($states);
    }
}

Даже если вы ничего не знаете о Laravel, код должен быть достаточно понятным. Я создал многомерный массив, состоящий из каждого названия штата и соответствующей ему двухсимвольной аббревиатуры.

До появления таких инструментов, как ChatGPT и Copilot, если вы хотели создать начальный файл, содержащий штаты США, вы обычно заходили в Google, искали что-то вроде «названия и аббревиатуры штатов США», а затем кропотливо копировали и вставляли результат в массив. Со временем разработчики, по понятным причинам, устали от такого рода работы и создали сообщения в блогах и GitHub, содержащие часто используемые начальные файлы. Например, если вы введете в поиск «начальный файл laravel us states», вы найдете довольно много ресурсов, содержащих полезные сид-файлы. Но даже это утомительный процесс, потому что вам нужно отсортировать результаты, найти код, который соответствует вашим потребностям, и, возможно, немного изменить его, чтобы он идеально соответствовал вашему приложению. Наверняка есть способ получше?

Получите работу аналитика данных своей мечты в 2023 году!

Научитесь программировать с помощью тщательно подобранной учебной программы Treehouse Techdegree, полной реальных проектов и невероятной поддержки студентов. Создайте свое портфолио. Пройдите сертификацию. Получите работу своей мечты в сфере технологий. Подпишитесь на бесплатную 7-дневную пробную версию сегодня!

Начать бесплатную пробную версию

treehouse-badge

Войдите в ChatGPT: Используя ChatGPT

, вы можете сгенерировать эти начальные файлы с помощью простой подсказки. Давайте перейдем к https://chat.openai.com/ и создадим тот же начальный файл, который я представил минуту назад. Я воспользуюсь следующей подсказкой:ChatGPT ответил

Please generate a Laravel seed file containing the two digit 
abbreviation and and name of each US state. Just provide the 
code without explanation.

:

<?php
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class StatesTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $states = [
            ['abbreviation' => 'AL', 'name' => 'Alabama'],
            ['abbreviation' => 'AK', 'name' => 'Alaska'],
            ['abbreviation' => 'AZ', 'name' => 'Arizona'],
            ['abbreviation' => 'AR', 'name' => 'Arkansas'],
            ['abbreviation' => 'CA', 'name' => 'California'],
            ['abbreviation' => 'CO', 'name' => 'Colorado'],
            ['abbreviation' => 'CT', 'name' => 'Connecticut'],
            ['abbreviation' => 'DE', 'name' => 'Delaware'],
            ['abbreviation' => 'FL', 'name' => 'Florida'],
            ['abbreviation' => 'GA', 'name' => 'Georgia'],
            ['abbreviation' => 'HI', 'name' => 'Hawaii'],
            ['abbreviation' => 'ID', 'name' => 'Idaho'],
            ['abbreviation' => 'IL', 'name' => 'Illinois'],
            ['abbreviation' => 'IN', 'name' => 'Indiana'],
            ['abbreviation' => 'IA', 'name' => 'Iowa'],
            ['abbreviation' => 'KS', 'name' => 'Kansas'],
            ['abbreviation' => 'KY', 'name' => 'Kentucky'],
            ['abbreviation' => 'LA', 'name' => 'Louisiana'],
            ['abbreviation' => 'ME', 'name' => 'Maine'],
            ['abbreviation' => 'MD', 'name' => 'Maryland'],
            ['abbreviation' => 'MA', 'name' => 'Massachusetts'],
            ['abbreviation' => 'MI', 'name' => 'Michigan'],
            ['abbreviation' => 'MN', 'name' => 'Minnesota'],
            ['abbreviation' => 'MS', 'name' => 'Mississippi'],
            ['abbreviation' => 'MO', 'name' => 'Missouri'],
            ['abbreviation' => 'MT', 'name' => 'Montana'],
            ['abbreviation' => 'NE', 'name' => 'Nebraska'],
            ['abbreviation' => 'NV', 'name' => 'Nevada'],
            ['abbreviation' => 'NH', 'name' => 'New Hampshire'],
            ['abbreviation' => 'NJ', 'name' => 'New Jersey'],
            ['abbreviation' => 'NM', 'name' => 'New Mexico'],
            ['abbreviation' => 'NY', 'name' => 'New York'],
            ['abbreviation' => 'NC', 'name' => 'North Carolina'],
            ['abbreviation' => 'ND', 'name' => 'North Dakota'],
            ['abbreviation' => 'OH', 'name' => 'Ohio'],
            ['abbreviation' => 'OK', 'name' => 'Oklahoma'],
            ['abbreviation' => 'OR', 'name' => 'Oregon'],
            ['abbreviation' => 'PA', 'name' => 'Pennsylvania'],
            ['abbreviation' => 'RI', 'name' => 'Rhode Island'],
            ['abbreviation' => 'SC', 'name' => 'South Carolina'],
            ['abbreviation' => 'SD', 'name' => 'South Dakota'],
            ['abbreviation' => 'TN', 'name' => 'Tennessee'],
            ['abbreviation' => 'TX', 'name' => 'Texas'],
            ['abbreviation' => 'UT', 'name' => 'Ut

Обратите внимание, как вывод резко останавливается до завершения вывода. Это связано с тем, что мы достигли установленного в настоящее время ChatGPT ограничения в 3,000 символов. Это ограничение почти наверняка изменится в будущем, поэтому вы можете не столкнуться с этой проблемой, однако, если это так, вы можете использовать эту подсказку, чтобы заставить ChatGPT изящно продолжить:ChatGPT продолжит с того места, на котором остановился, закончив фрагмент:

continue writing the code in last response

            ['abbreviation' => 'UT', 'name' => 'Utah'],
            ['abbreviation' => 'VT', 'name' => 'Vermont'],
            ['abbreviation' => 'VA', 'name' => 'Virginia'],
            ['abbreviation' => 'WA', 'name' => 'Washington'],
            ['abbreviation' => 'WV', 'name' => 'West Virginia'],
            ['abbreviation' => 'WI', 'name' => 'Wisconsin'],
            ['abbreviation' => 'WY', 'name' => 'Wyoming'],
        ];
        DB::table('states')->insert($states);
    }
}

Отсюда вы можете скопировать оба фрагмента в свой начальный файл и продолжить по своему усмотрению.

Уточнение кода

ChatGPT Предположим, вы поняли, что допустили ошибку, инструктировав ChatGPT использовать атрибуты для name начальных записей, и вместо этого намеревались использовать abbreviation abbr аббревиатуру. Вместо того, чтобы просить ChatGPT повторно сгенерировать входной начальный файл, вы можете сказать:ChatGPT возвращает:

Please modify the $states array to use abbr as the key instead of abbreviation. Return only the states array and not the entire seed file.

$states = [
    ['abbr' => 'AL', 'name' => 'Alabama'],
    ['abbr' => 'AK', 'name' => 'Alaska'],
    ['abbr' => 'AZ', 'name' => 'Arizona'],
    ['abbr' => 'AR', 'name' => 'Arkansas'],
    ['abbr' => 'CA', 'name' => 'California'],
    ['abbr' => 'CO', 'name' => 'Colorado'],
    ['abbr' => 'CT', 'name' => 'Connecticut'],
    ['abbr' => 'DE', 'name' => 'Delaware'],
    ['abbr' => 'FL', 'name' => 'Florida'],
    ...

Генерация динамических исходных данных с помощью ChatGPT Вы также можете использовать ChatGPT

для динамического создания начальных данных. Большинство языков программирования поддерживают эту возможность через стороннюю зависимость с открытым исходным кодом. Несколько примеров см. в записках Учителя. В случае PHP эта сторонняя зависимость называется Faker. ChatGPT понимает Faker, и поэтому мы можем поручить ему использовать Faker для генерации 25 пользователей:ChatGPT ответит:Если после создания кода вам напомнят, что ваша таблица пользователей не разбивает имена пользователей на отдельные поля имени и фамилии, вы можете попросить ChatGPT пересмотреть код:

You are a Laravel programmer. Create a seed file that uses the Faker library to seed 25 users into a table named users. Each user should consist of a first_name, last_name, and email field.

<?php
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Faker\Factory as Faker;
class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $faker = Faker::create();
        for ($i = 0; $i < 25; $i++) {
            DB::table('users')->insert([
                'first_name' => $faker->firstName,
                'last_name' => $faker->lastName,
                'email' => $faker->unique()->safeEmail,
            ]);
        }
    }
}

Please revise your code so each user has a single field for the first and 
last name instead of separate fields first_name and last_name.

ChatGPT ответит следующим образом:

<?php
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Faker\Factory as Faker;
class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $faker = Faker::create();
        for ($i = 0; $i < 25; $i++) {
            $fullName = $faker->name;
            $email = $faker->unique()->safeEmail;
            DB::table('users')->insert([
                'name' => $fullName,
                'email' => $email,
            ]);
        }
    }
}

В этом ответе мне не нравится, как ChatGPT сначала объявил $fullName и $email переменные, потому что код будет немного чище, если мы просто создадим name экземпляр и safeEmail методы непосредственно внутри методаinsert. Давайте попросим его пересмотреть код:Его ответ:

Please revise the code to call $faker object methods inside 
the insert method instead of first instantiating variables for the name and email.

<?php
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Faker\Factory as Faker;
class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $faker = Faker::create();
        for ($i = 0; $i < 25; $i++) {
            DB::table('users')->insert([
                'name' => $faker->name,
                'email' => $faker->unique()->safeEmail,
            ]);
        }
    }
}

Отлично!

Заключение

Такие инструменты, как ChatGPT и GitHub Copilot, действительно могут повысить вашу производительность, помогая вам быстро выбивать утомительный код и наборы данных, которые в противном случае потребовали бы изрядного количества поиска в Google, копирования, вставки и переформатирования. Если вы нашли этот пост в блоге полезным, я приглашаю вас подписаться на бесплатную семидневную подписку на Treehouse, чтобы узнать больше о ChatGPT, искусственном интеллекте, LLM, науке о данных и многом другом!

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

Об авторе CrazyBoy49z
WORK EXPERIENCE
Контакты
Ukraine, Lutsk
+380979856297