• Czas czytania ~9 min
  • 23.05.2023

Frameworki takie jak Laravel i Ruby on Rails eliminują niezliczone decyzje, które w przeciwnym razie musiałbyś podjąć podczas tworzenia aplikacji internetowych. Mimo to dużo czasu poświęca się na przyziemne zadania, a nie na budowanie własności intelektualnej, która czyni aplikację wyjątkową. Jednym z takich zadań jest generowanie plików źródłowych bazy danych. W tym poście pokażę, jak możesz użyć ChatGPT do generowania zarówno statycznych, jak i dynamicznych plików źródłowych bazy danych i szybkiego wypełniania bazy danych realistycznymi danymi.

Co to jest plik źródłowy bazy danych?

Podczas tworzenia aplikacji internetowej bardzo przydatne jest popularyzowanie interfejsów użytkownika z realistycznie wyglądającymi danymi. Niektóre z tych danych są sfałszowane, co oznacza na przykład losowo generowane nazwy użytkowników i adresy e-mail, podczas gdy inne dane są szablonowe, co oznacza, że składają się ze statycznych list, takich jak stany USA i drużyny baseballowe Major League.

Po zaimportowaniu tych danych do rozwojowej bazy danych tworzenie różnych stron i pulpitów nawigacyjnych jest znacznie bardziej realistyczne. Na przykład tutaj jest strona wypełniona fałszywymi użytkownikami. Te dane testowe są importowane do rozwojowej bazy danych przy użyciu pliku źródłowego. Na przykład plik źródłowy oparty na Laravel zawierający stany USA może wyglądać tak:

<?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);
    }
}

Nawet jeśli nie wiesz nic o Laravel, kod powinien być dość zrozumiały. Stworzyłem wielowymiarową tablicę składającą się z każdej nazwy stanu i odpowiadającego jej dwuznakowego skrótu.

Przed narzędziami takimi jak ChatGPT i Copilot, jeśli chcesz utworzyć plik źródłowy zawierający stany USA, zwykle przechodzisz do Google, wyszukujesz coś takiego jak "nazwy i skróty stanów USA", a następnie starannie kopiujesz i wklejasz wynik do tablicy. Z biegiem czasu, co zrozumiałe, programiści znudzili się tego rodzaju pracą i stworzyli posty na blogu i gist GitHub zawierające powszechnie używane pliki seed. Na przykład, jeśli szukasz "laravel us states seed file", znajdziesz sporo zasobów zawierających przydatne pliki seed. Ale nawet to jest żmudnym procesem, ponieważ musisz sortować wyniki, znaleźć kod, który spełnia Twoje potrzeby i ewentualnie zmodyfikować go nieco dalej, aby idealnie pasował do Twojej aplikacji. Z pewnością istnieje lepszy sposób?

Wyląduj na wymarzonej posadie analityka danych w 2023 roku!

Naucz się kodować dzięki wyselekcjonowanemu programowi nauczania Treehouse Techdegree, pełnemu rzeczywistych projektów i niesamowitemu wsparciu studentów. Zbuduj swoje portfolio. Uzyskaj certyfikat. Wyląduj w wymarzonej pracy w technologii. Zarejestruj się, aby skorzystać z bezpłatnej, 7-dniowej wersji próbnej już dziś!

Rozpocznij bezpłatny okres próbny

treehouse-badge

Wprowadź ChatGPT Korzystając z ChatGPT

, możesz wygenerować te pliki początkowe za pomocą prostego monitu. Przejdźmy do https://chat.openai.com/ i stwórzmy ten sam plik źródłowy, który przedstawiłem przed chwilą. Użyję następującego monitu: ChatGPT odpowiedział:

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

Zwróć uwagę,

<?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

jak wyjście nagle zatrzymuje się przed zakończeniem wyjścia. Wynika to z faktu, że osiągnęliśmy obecnie narzucony przez ChatGPT limit znaków 3,000. To ograniczenie prawie na pewno zmieni się w przyszłości, więc możesz nie napotkać tego problemu, jednak jeśli tak, możesz użyć tego monitu, aby zmusić ChatGPT do wdzięcznej kontynuacji:ChatGPT rozpocznie od miejsca, w którym zostało przerwane, kończąc fragment:

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);
    }
}

Stąd możesz skopiować oba fragmenty do pliku źródłowego i postępować zgodnie z potrzebami.

Udoskonalanie kodu

ChatGPT Załóżmy, że popełniłeś błąd, instruując ChatGPT, aby używał abbreviation i name atrybutów dla wpisów początkowych, a zamiast tego zamierzałeś użyć abbr skrótu. Zamiast prosić ChatGPT o ponowne wygenerowanie pliku początkowego Enter, możesz powiedzieć:ChatGPT zwraca :

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'],
    ...

Generowanie dynamicznych danych początkowych za pomocą ChatGPT Możesz również użyć ChatGPT

do dynamicznego generowania danych początkowych. Większość języków programowania obsługuje tę zdolność za pośrednictwem zależności open source innej firmy. Zobacz notatki Nauczyciela, aby zapoznać się z kilkoma przykładami. W przypadku PHP ta zależność strony trzeciej nazywa się Faker. ChatGPT rozumie Fakera i możemy go poinstruować, aby używał Faker do generowania 25 użytkowników: ChatGPT odpowie

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.

:Jeśli po wygenerowaniu kodu przypomnisz sobie, że tabela użytkowników nie dzieli nazw użytkowników na osobne pola imienia i nazwiska, możesz poprosić ChatGPT o poprawienie kodu:

<?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 odpowie w następujący sposób:

<?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,
            ]);
        }
    }
}

W tej odpowiedzi nie podoba mi się, jak ChatGPT po raz pierwszy zadeklarował $fullName i $email zmienne, ponieważ kod będzie odrobinę czystszy, jeśli po prostu utworzymy name instancję metod i safeEmail bezpośrednio wewnątrz insert metody. Poprośmy go o poprawienie kodu:Jego odpowiedź:

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,
            ]);
        }
    }
}

Świetnie!

Narzędzia do wyciągania wniosków, takie jak ChatGPT i GitHub Copilot, mogą naprawdę zwiększyć Twoją produktywność, pomagając szybko wyeliminować żmudny kod i zestawy danych, które w przeciwnym razie wymagałyby sporo googlowania, kopiowania, wklejania

i formatowania. Jeśli uważasz, że ten post na blogu jest przydatny, zapraszam do zapisania się na bezpłatną siedmiodniową subskrypcję Treehouse, aby dowiedzieć się więcej o ChatGPT, AI, LLM, nauce o danych i nie tylko!

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

O

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...

O autorze CrazyBoy49z
WORK EXPERIENCE
Kontakt
Ukraine, Lutsk
+380979856297