Symfony - tworzenie pierwszej tabeli w bazie danych
Stronę tą wyświetlono już: 1867 razy
Na poprzedniej stronie tego działu opisałem jakże zaawansowane zagadnienie tworzenia bazy danych w Symfony teraz nadszedł najwyższy czas, aby rozpocząć przygodę z tworzeniem nowiusieńkiej tabelki w tej samej bazie danych co została utworzona uprzednio. Żeby nie przedłużać tego i tak już długiego wywodu o tworzeniu bazy danych w Symfony przejdźmy do sedna rzeczy i utwórzmy jakże upragnioną i pożądaną tabelkę.
No cóż! Nie od razu Kraków zaorano, więc najpierw zacznijmy od stworzenia klasy PHP, która to w jakże przebiegły sposób będzie opisywała pola zawarte w tabelce. W Symfony 4+ robi się to tak:
php bin/console make:entity Class name of the entity to create or update (e.g. AgreeableKangaroo): > Page created: src/Entity/Page.php created: src/Repository/PageRepository.php Entity generated! Now let's add some fields! You can always add more fields later manually or by re-running this command. New property name (pressto stop adding fields) : > Title Field type (enter ? to see all types) [string]: > string Field length [255]: > Can this field be null in the database (nullable) (yes/no) [no]: > yes updated: src/Entity/Page.php Add another property? Enter the property name (or pressto stop adding fields) : > content Field type (enter ? to see all types) [string]: > ? Main types * string * text * boolean * integer (or smallint, bigint) * float Relationships / Associations * relation (a wizard ???? will help you build the relation) * ManyToOne * OneToMany * ManyToMany * OneToOne Array/Object Types * array (or simple_array) * json * object * binary * blob Date/Time Types * datetime (or datetime_immutable) * datetimetz (or datetimetz_immutable) * date (or date_immutable) * time (or time_immutable) * dateinterval Other Types * json_array * decimal * guid Field type (enter ? to see all types) [string ]: > text Can this field be null in the database (nullable) (yes/no) [no]: > yes updated: src/Entity/Page.php Add another property? Enter the property name (or press to stop adding fields) : > Success!
A cóż to się dzieje w tej konsoli?! Dzieje się proces tworzenia klasy opisującej tabelkę. Ta klasa później będzie wykorzystywana do pozyskiwania i dodawania rekordów do bazy danych. W pierwszym zapytaniu program pyta się uprzejmie jak tylko może o nazwę klasy, która to w późniejszym czasie zostanie zamieniona w tabelkę umieszczoną w bazie danych.
W kolejnych zapytaniach tworzone są nowe i nowe pola klasy, dla których konieczne jest podanie nazwy oraz typu danych, jakie te pola przechowują. Znak zapytania ? jak widać wyświetla listę nie zliczonych (przynajmniej przeze mnie) opcji, jakimi można się posłużyć przy przypisywaniu typu pola tabelki.
Warto nadmienić, że klasa zostanie zapisana w folderze src/Entity pod wcześniej wybraną nazwą. Nie wnikając w szczegóły zawartości tegoż magicznego pliku można już z najdzikszą rozkoszą oddać się niezmiernej przyjemności utworzenia pierwszej tabelki. W tym celu w konsoli warto wpisać następujące polecenie:
php bin/console make:migration
Co spowoduje wyświetlenie komunikatu:
Success! Next: Review the new migration "src/Migrations/Version20190303154102.php" Then: Run the migration with php bin/console doctrine:migrations:migrate See https://symfony.com/doc/current/bundles/DoctrineMigrationsBundle/index.html
teraz już tylko jedno polecenie dzieli nas od osiągnięcia celu:
php bin/console doctrine:migrations:migrate
Wynikiem czego będzie utworzenie upragnionej tabelki:
Application Migrations WARNING! You are about to execute a database migration that could result in schema changes and data loss. Are you sure you wish to continue? (y/n)y Migrating up to 20190303154102 from 0 ++ migrating 20190303154102 -> CREATE TABLE page (id INT AUTO_INCREMENT NOT NULL, title VARCHAR(255) DEFAULT NULL, content LONGTEXT DEFAULT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB ++ migrated (took 333.3ms, used 14M memory) ------------------------ ++ finished in 335.5ms ++ used 14M memory ++ 1 migrations executed ++ 1 sql queries
Jak widać, utworzona została tabelka w bazie danych nic tylko się cieszyć i radować! Oczywiście nic nie stoi na przeszkodzie, aby ręcznie stworzyć pliki opisujące bazę danych i tylko wykonać migracje tworząc tym samym tabelki w bazie danych. Należy pamiętać, że każda migracja nadpisuje bazę danych czyli tworzy od nowa tabelki.