Opis struktury danych
Opis struktury danych
做komunikacji PHP z bazą danych uzyjemy学说.笑话zestaw bibliotek, które pomagają zarzibazdanych:学说DBAL (warstwa abstrakcji bazy danych),学说ORM (biblioteka do zarzibazania danymi w bazie danych, za pomocą obiektów PHP), oraz学说迁移。
Konfigurowanie主义
斯卡茨学说wie, jak po华沙奇克się z bazą danych?Przepis (ang。食谱)instalujagicy教义dodarov odpowiedni plik konfigacyjny (配置/包/ doctrine.yaml
), który kontroluje jego zachowanie。Głównym ustawieniem笑话数据库DSN, napis zawierajagicy wszystkie informacje o po波兰茨琴纽:丹麦uwierzytelniajagice,东道主,港口itp。多米罗尼学说DATABASE_URL
.
Prawie wszystkie zainstalowane pakety posiadają swoją konfigurację w katalogu配置/包/
.W维耶克佐夫维奇przypadków,瓦托维奇多米佐夫尼byy wybierane ostrovnie, aby dziaaviy W维耶克佐夫维奇aplikacji。
Zrozumienie konwencji zmiennych trodowiskowych w ob娱乐下载Symfony
moesz zdefiniowaic zmienną środowiskowąDATABASE_URL
rzhcznie和pliku.env
滑.env.local
.德济耶基·普泽皮索维(昂。食谱)pakietu, mobetesz bazowaic na przykadadowej wartotzci zmiennej rodowiskowejDATABASE_URL
juwpisanej w pliku.env
.Pojawia się jednak问题uciagizynliwej rjellcznej aktualizacji wpisu po kazvdej zmianie portu bazy danych PostgreSQL udostzynpnionego przez Dockera。Lepiej wijich podejwicch do sprawy w inny sposób。
扎米亚斯特,多科尼瓦克,什泰尼戈,乌斯塔维尼亚,兹米恩内亚,茨罗多维斯科韦DATABASE_URL
W pliku, mozeesz poprzedzak wszystkie polecenia sozowemob娱乐下载
.dzianyki temu wszystkie ususugui dziawoajajwce w kontenerze Docker i/lub Platform.sh (wyzyncznie jeutli mamy otwarty tunel z Platform.sh) będą automatycznie ustawione jako zmienne trodowiskowe。
dzizyki zmiennym trodowiskowym integracjaob娱乐下载 Symfony z Docker Compose i Platform.sh jest bezproblemowa。
莫塞茨,阿克图阿尔尼,兹米恩,兹罗多维斯科,w, konsoli, poprzez, uzecie, poleceniaob娱乐下载symfony var:出口
:
1
$ob娱乐下载symfony var:出口
1 2
DATABASE_URL = postgres: / /主要:main@127.0.0.1:32781 /主要吗?Sslmode =disable&charset=utf8 #…
Pamiętaszługi nazwę我们数据库
, której uzylivmy w konfigacji Docker i Platform.sh?Nazwy usug są乌克兰jako prefiksy do definiowania zmiennych korodowiskowych, takich jakDATABASE_URL
.jeutli twoje ususgui są nazwane zgodnie z konwencjamob娱乐下载i Symfony, avadna dodatkowa konfiguracja nie jest potrzebna。
请注意
巴兹丹尼尼są jedyną usługą, która korzysta tej z konwencji。到萨莫多提奇那przykwad Mailera (zmienna trodowiskowa)MAILER_DSN
).
Zmiana domyutlnej warto2000i DATABASE_URL w pliku .env
Zmienimy plik.env
达克,阿比乌斯塔维奇domyślną瓦托茨克兹米恩内耶茨罗多维斯科韦DATABASE_URL
国防后勤局PostgreSQL:
1 2 3 4 5 6 7 8 9 10 11
——/ .env+ + + b / .env@@ -29,7 +29,7 @@ MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0 # # DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db" # DATABASE_URL="mysql://app:!ChangeMe!serverVersion = 8 charset = utf8mb4”-DATABASE_URL = " postgresql: / / app: ChangeMe ! @127.0.0.1:5432 /应用程序吗?serverVersion = 14 charset = utf8 "+ DATABASE_URL = " postgresql: / / 127.0.0.1:5432 / db吗?serverVersion = 14 charset = utf8 "###<教条/教条-捆绑### ###> symfony/信使###ob娱乐下载
德拉泽戈博物馆波维拉奇tę samą informację w dwóch różnych miejscach?波尼瓦耶扎niektórych platformach chmurowych,W czasie budowaniaaplikacji, adres URL bazy danych moze nie byk jeszcze znany, a Doctrine potrzebuje informacji o silniku bazy danych, aby zbudowak odpowiednią dla niego konfigurację。德wijechost, nazwa uuytkownika i haszo nie mają wiuykszego znaczenia。
Tworzenie klas encji
Konferencję mobna opisaic kilkoma atrybutami:
- 城市- miasto, w którym organizowana jest konferencja;
- 一年- rok, w którym odbywa się konferencja;
- 的国际- flaga wskazujca, czy konferencja jest krajowa, czy mijdzynarodowa (Sob娱乐下载ymfonyLive vs SymfonyCon)。
制造者捆绑pomobe nam wygenerowaic klasęencji(ang。实体),która byldzie reprezentowawa konferencję。
Pora wygenerowaic encję会议
:
1
$ob娱乐下载symfony控制台make:实体会议
To polecenie jest uruchamiane w trybie interaktywnym - poprowadzi Cię przez proces dodawania wszystkich potrzebnych pól。乌茨基纳斯特耶普耶什奇乌茨耶奇(维耶克佐夫耶奇z nich to odpowiedzi domyielne,维耶克莫泽兹纳西纳瓦奇克拉维兹“进入”,阿比伊奇乌茨耶奇):
城市
,字符串
,255
,没有
;一年
,字符串
,4
,没有
;的国际
,布尔
,没有
.
Oto peynne wyjwiccie(昂。输出)Po uruchomieniu polecenia:
12 34 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
创建:src/Repository/ConferenceRepository.php现在让我们添加一些字段!您可以稍后手动或重新运行此命令添加更多字段。新属性名称(按<返回>停止添加字段):> city字段类型(enter ?查看所有类型)[string]: >字段长度[255]:>该字段在数据库中是否为空(nullable) (yes/no) [no]: > updated: src/Entity/Conference.php添加另一个属性?输入属性名(或按停止添加字段):> year字段类型(Enter ?查看所有类型)[string]: >字段长度[255]:> 4该字段在数据库中可以为空(nullable) (yes/no) [no]: > updated: src/Entity/Conference.php添加另一个属性?输入属性名(或按停止添加字段):> isInternational字段类型(Enter ?查看所有类型)[boolean]: >这个字段在数据库中可以为空(nullable) (yes/no) [no]: > updated: src/Entity/Conference.php添加另一个属性?输入属性名(或按停止添加字段):> Success! Next: When you're ready, create a migration with make:migration
Klasa会议
佐斯塔佳·萨帕莎娜和普泽策尼·纳兹应用实体\ \
.
Polecenie wygenerowazo również klasęrepozytorium(ang。存储库)原则:App \ Repository \ ConferenceRepository
.
Wygenerowany kod wyglagida nastylpujagico (tylko niewielka czielkovic pliku jest tu pokazana):
扎乌瓦耶扎乌瓦耶扎乌瓦耶扎乌瓦耶扎扎耶特zwykłą klasą PHP -扎乌瓦耶扎耶特elementów学说。Metadane wykorzystywane przez Doctrine do powizania klasy z tabelą w bazie danych dodajemy, uzywajc atrybutów。
教条dodaolatrybutid
,阿比扎乔瓦克克鲁兹główny w塔贝利巴齐丹尼奇。十克卢兹(ORM \ Id ()
笑话自动的,自动的ORM \ GeneratedValue ()
) w sposób zalevny od silnika bazy danych (oparty o wzorzec strategy)。
Teraz wygeneruj klasę encji dla komentarzy:
1
$ob娱乐下载symfony控制台make:实体注释
wprowadunido nasttsepujesce odpowiedzi:
作者
,字符串
,255
,没有
;文本
,文本
,没有
;电子邮件
,字符串
,255
,没有
;createdAt
,datetime_immutable
,没有
.
Łączenie encji
Obie encje,会议
我评论
, powinny byovic ze sobą powizhaane。konferenja moze miiek 0 lub wientcej komentarzy, co nazywamy relacjąJeden do挥舞(ang。一对多)。
polecenia乌桕:实体
, aby zdefiniowak tę relację w klasie会议
:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
您的实体已经存在!因此,让我们添加一些新字段!新属性名(按<返回>停止添加字段):> comments字段类型(输入?[string]: > OneToMany这个实体应该与什么类相关?一个新的属性也将被添加到Comment类…注释[conference]中的新字段名:>是注释。会议属性允许为空(可空)?(yes/no) [yes]: > no你想在你的关系上激活orphanRemoval吗?当一条注释从相关的会议中删除时,它就是“孤儿”。注意:如果一个注释可以从一个会议更改到另一个会议,回答“no”。你想自动删除孤立的应用程序\实体\评论对象(orphanRemoval)?(yes/no) [no]: > yes updated: src/Entity/Conference.php updated: src/Entity/Comment.php
请注意
我李śwpiszesz?
Jako odpowiedtsingw pytaniu o typ pola, otrzymasz listę wszystkich obsugiwanych typów:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
主要类型*文本字符串* *布尔*整数(或短整型、长整型数字)/协会* *浮动关系关系(一个向导将帮助您构建的关系)* ManyToOne * OneToMany * ManyToMany * OneToOne数组/对象类型*数组(或simple_array) * json对象* *二进制*团日期/时间* datetime类型(或datetime_immutable) * datetimetz(或datetimetz_immutable) *日期(或date_immutable) *时间(或time_immutable) * dateinterval其他类型*十进制* * json_array guid
Przyjrzyj się litzcie różnic dla klas encji po dodaniu relacji:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
——/ src /实体/ Comment.php+ + + b / src /实体/ Comment.php@@ -36,6 +36,12 @@ class Comment */ private $createdAt;+ #[ORM\ManyToOne(inversedBy: 'comments')]+ #[ORM\JoinColumn(nullable: false)]+私人会议$会议;+公共函数getId(): ?int{返回$this->id;@@ -88,4 +94,16 @@类注释返回$this;}++公共函数getConference():+ {+返回$this->会议;+}++公共功能setConference(?会议$会议):自我+ {+ $this->conference = $conference;++返回$this;+}}——/ src /实体/ Conference.php+ + + b / src /实体/ Conference.php@@ -2,6 +2,8 @@名称空间的应用程序\实体;+使用原则\常见\ \ ArrayCollection集合;+使用原则\常见\集合\集合;使用Doctrine\ORM\Mapping作为ORM;/** @@ -31,6 +33,16 @@班级会议*/ private $isInternational;+ #[ORM\OneToMany(targetEntity: Comment::class, mappedBy: "conference", orphanRemoval: true)]+私人$评论;++公共函数__construct()+ {+ $this->comments = new ArrayCollection();+}+公共函数getId(): ?int{返回$this->id;@@ -71,4 +83,35 @@ class会议返回$this;}++ / * *+ * @返回集合 + * /+公共函数getComments():集合+ {+返回$this->注释;+}++公共函数addComment(Comment $ Comment): self+ {+ if (!$this->comments->contains($comment)) {+ $this->comments[] = $comment;+ $评论- > setConference ($);+}++返回$this;+}++公共函数removeComment(Comment $ Comment): self+ {+ if ($this->comments->contains($comment)) {+ $ this - >评论> removeElement($评论);+ //设置所属端为空(除非已经更改)+ if ($comment->getConference() === $this) {+ $评论- > setConference(空);+}+}++返回$this;+}}
Wszystko,捷克potrzebujesz do zarzitzzzania tą relacją, zostazo wygenerowane automatycznie。Później kod moeyesz zmieniich jak chcesz。
Dodawanie kolejnych atrybutów
woaennie zdaeem sobie sprawę, zazomomnielienmy dodaic pewien atrybut w encji评论
: uczestnicy mogą chciek dowazichzyk zdjagicie z konferencji, aby zilustrowak swoje opinion。
Uruchom:实体
Jeszcze raz我没有试过photoFilename
Jako kolumnę typu字符串
.Pozwól jej przyjmowaic wartowicch零
,波尼瓦耶扎多丹妮。
1
$ob娱乐下载symfony控制台make:实体注释
Migracja bazy danych
模型projektu skucada się teraz z dwóch wyachennie wygenerowanych klas。
W kolejnym kroku musimy utworzyk table W bazie danych zwizhezane z naszymi encjami W PHP。
Biblioteka教义迁移致narzyldzie idealnie dopasowane do tego zadania。佐斯塔耶娜,朱耶扎因斯塔罗瓦娜,贾科·切耶茨基,扎莱佐夫诺维奇orm
.
Migracja(ang。迁徙)玩笑klasą, która opisuje zmiany wykonywane w bazie danych, aby z obbecnego schematu przejwicch na nowy, zdefiniowany w atrybutach encji。波尼瓦耶扎扎danych jest na razie pusta, migracja powinna skwadak się z operacji tworzizcych dwie table。
Zobaczmy, co wygeneruje学说:
1
$ob娱乐下载Symfony控制台make:迁移
Zwróć uwagę na wygenerowaną nazwę pliku, która powinna przypominac迁移/ Version20191019083640.php
:
Aktualizacja lokalnej bazy danych
mobezz teraz uruchomich migrację, aby zaktualizowaic schemat lokalnej bazy danych:
1
$ob娱乐下载Symfony控制台原则:迁移:迁移
Schemat lokalnej bazy danych jest teraz aktualny i przygotowany do przechowywania niektórych danych。
Aktualizacja produkcyjnej bazy danych
Kroki potrzebne do wykonania migracji na produkcyjnej bazie danych są takie same jak te, które ju耶扎纳兹:zatwierdzmiany (ang。承诺)我wdrazhaaj。
Podczas wdrazania projektu, Platform.sh oprócz aktualizacji kodu uruchamia takzue migrację bazy danych, jeutli taka istnieje (wykrywa, czy istnieje polecenie原则:迁移:迁移
).
Idąc dalej
- 贝兹丹尼奇学说ORMw aplikacjach ob娱乐下载Symfony;
- Samouczek ob娱乐下载symfonycasting Doctrine;
- Wykorzystanie asocjacji i relacji教义;
- Dokumentacja DoctrineMigrationsBundle.
$ob娱乐下载symfony控制台make:实体会议