Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 2075 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 (press  to 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 press  to 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.

Layout wykonany przez autora strony, wszelkie prawa zastrzeżone. Jakiekolwiek użycie części lub całości grafik znajdujących się na tej stronie bez pisemnej zgody jej autora surowo zabronione.