• Час читання ~9 хв
  • 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 повторно створити вхідний насіннєвий файл, ви можете сказати:

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 і змінні, тому що код буде трохи чистішим, якщо ми просто створимо name екземпляр методів і $email 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, AI, 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