opi struktury danych
opi struktury danych
做komunikacji PHP z baządanych użyjemy吗学说。Jest zestaw bibliotek, ktore pomagajązarządzaćbazami danych:教义DBAL (warstwa abstrakcji bazy danych),教义ORM (biblioteka做zarządzania danymi w bazie danych,咱pomocąobiektow PHP), oraz教义迁移。
ORM Konfigurowanie学说
Skąd教义标准衡量,木菠萝połączyćsięz baządanych吗?Przepis (ang。配方)instalujący教义dodałodpowiedni plik konfiguracyjny (配置/包/ doctrine.yaml
),ktory kontroluje jego zachowanie。Głownym ustawieniem开玩笑数据库DSN,napis zawierający wszystkie informacje o połączeniu:戴恩uwierzytelniające, itp主机、端口。Domyślnie教义szuka zmiennejśrodowiskowejDATABASE_URL
。
Prawie wszystkie zainstalowane pakiety posiadająswojąkonfiguracjęw katalogu配置/包/
。W większości przypadkow, wartości domyślne były wybierane ostrożnie,赎działały W większości aplikacji。
Zrozumienie konwencji zmiennychśrodowiskowych w Sob娱乐下载ymfony
Możesz zdefiniowaćzmiennąśrodowiskowąDATABASE_URL
ręcznie w pliku.env
滑.env.local
。Dzięki przepisowi (ang。配方)pakietu możesz bazowaćna przykładowej wartości zmiennejśrodowiskowejDATABASE_URL
jużwpisanej w pliku.env
。Pojawia sięjednak问题uciążliwej ręcznej aktualizacji wpisu阿宝każdej zmianie portu bazy danych PostgreSQL udostępnionego przez Dockera。Lepiej więc podejść做sprawy w inny sposob。
Zamiast dokonywaćsztywnego ustawienia zmiennejśrodowiskowejDATABASE_URL
w pliku możesz poprzedzaćwszystkie polecenia słowemob娱乐下载
。Dzięki temu wszystkie usługi działające w kontenerze码头工人i /滑平台。sh (wyłącznie jeśli mamy otwarty tunel z Platform.sh) będąautomatycznie ustawione jako zmienneśrodowiskowe。
Dzięki zmiennymśrodowiskowym integracja Sob娱乐下载ymfony z码头工人组成我的平台。sh jest bezproblemowa。
Możesz sprawdzićaktualne zmienneśrodowiskowe w konsoli poprzez użycie poleceniaob娱乐下载symfony var:出口
:
1
美元ob娱乐下载symfony var:出口
1 2
DATABASE_URL = postgres: / / app: ! ChangeMe ! @127.0.0.1:32781 /应用程序吗?sslmode = disable&charset = utf8 #……
Pamiętasznazwęusługi数据库
我,ktorej użyliśmy w konfiguracji码头工人Platform.sh吗?Nazwy usług sąużywane jako prefiksy做definiowania zmiennychśrodowiskowych, takich木菠萝DATABASE_URL
。Jeśli twoje usługi sąnazwane zgodnie z konwencjami Sob娱乐下载ymfony,żadna dodatkowa konfiguracja聂jest potrzebna。
请注意
Bazy danych聂sąjedynąusługą,ktora korzysta tej z konwencji。在萨摩dotyczy na przykład Mailera (zmiennaśrodowiskowaMAILER_DSN
)。
Zmiana domyślnej wartości DATABASE_URL w pliku .env
Zmienimy plik.env
德,赎ustawićdomyślnąwartośćzmiennejśrodowiskowejDATABASE_URL
国防后勤局PostgreSQL:
1 2 3 4 5 6 7 8 9 10 11
- - - a / .env+ + + b / .env@@ -29 7 + 29 7 @@ MESSENGER_TRANSPORT_DSN =学说:/ /默认吗?auto_setup = 0 # # DATABASE_URL = " sqlite: / / / % kernel.project_dir % / var /数据。db”# DATABASE_URL =“mysql: / / app: ! ChangeMe ! @127.0.0.1:3306 / app ? serverVersion = 8 charset = utf8mb4”-DATABASE_URL = " postgresql: / / app: ChangeMe ! @127.0.0.1:5432 / app ? serverVersion = 14 charset = utf8 "+ DATABASE_URL = " postgresql: / / 127.0.0.1:5432 / db ? serverVersion = 14 charset = utf8 "# # # <教义/ doctrine-bundle # # # # # # ob娱乐下载> symfony /信使# # #
Dlaczego musimy powielaćtęsamąinformacjęw dwoch rożnych miejscach吗?Ponieważna niektorych platformach chmurowych,w czasie budowaniaaplikacji这URL bazy danych może聂byćjeszcze znany,教义potrzebuje informacji o silniku bazy danych,赎zbudowaćodpowiednią国防后勤局niego konfigurację。Tak więc主机,nazwa użytkownika我hasło聂mająwiększego znaczenia。
Tworzenie兰encji
Konferencjęmożna opisaćkilkoma atrybutami:
- 城市——miasto w ktorym organizowana jest konferencja;
- 一年——韩国,w ktorym odbywa siękonferencja;
- 的国际——flaga wskazująca, czy konferencja jest krajowa, czy międzynarodowa (ob娱乐下载SymfonyLive vs SymfonyCon)。
制造商包pomoże南wygenerowaćklasęencji(ang。实体),ktora będzie reprezentowała konferencję。
Pora wygenerowaćencję会议
:
1
美元ob娱乐下载symfony控制台:实体会议
polecenie jest uruchamiane w trybie interaktywnym——poprowadzi Cięprzez过程dodawania wszystkich potrzebnych波尔。Użyj następujących odpowiedzi (większośćz nich odpowiedzi domyślne, więc możesz nacisnąćklawisz“输入”,赎我użyć):
城市
,字符串
,255年
,没有
;一年
,字符串
,4
,没有
;的国际
,布尔
,没有
。
Oto pełne wyjście (ang。输出)阿宝uruchomieniu polecenia:
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
创建:src /实体/会议。php创建:src /仓库/ ConferenceRepository。php生成实体!现在让我们添加一些字段!你可以添加多个字段后手动或通过重新运行这个命令。新的属性名(按<返回>停止添加字段):>城市字段类型(输入?查看所有类型)[string]: >字段长度[255]:>可以在数据库中该字段为null(可以为空)(yes / no)[不]:>更新:src /实体/会议。php添加另一个属性吗?输入属性名称(或按<返回>停止添加字段):>年字段类型(输入?查看所有类型)[string]: >字段长度[255]:> 4可以在数据库中该字段为null(可以为空)(yes / no)[不]:>更新:src /实体/会议。php添加另一个属性吗?输入属性名称(或按<返回>停止添加字段):>国际字段类型(输入?看到所有类型)(布尔):>可以在数据库中该字段为null(可以为空)(yes / no)[不]:>更新:src /实体/会议。php添加另一个属性吗? Enter the property name (or press to stop adding fields): > Success! Next: When you're ready, create a migration with make:migration
Klasa会议
została zapisana w przestrzeni nazw应用实体\ \
。
Polecenie wygenerowało rownieżklasęrepozytorium(ang。存储库)原则:App \ Repository \ ConferenceRepository
。
Wygenerowany kod wygląda następująco (tylko niewielka częśćpliku笑话你pokazana):
Zauważ,że właśnie utworzona klasa jest zwykłąklasąPHP -马聂w niej elementow教义。Metadane wykorzystywane przez学说做powiązania klasy z tabeląw bazie danych dodajemy, używając atrybutow。
教义dodałatrybutid
,赎zachowaćklucz głowny w tabeli bazy danych。十klucz (ORM \ Id ()
)开玩笑automatycznie generowany (ORM \ GeneratedValue ()
)w sposob zależny od silnika bazy danych (oparty o wzorzec strategii)。
Teraz wygeneruj klasęencji国防后勤局komentarzy:
1
美元ob娱乐下载symfony控制台:实体发表评论
Wprowadźnastępujące odpowiedzi:
作者
,字符串
,255年
,没有
;文本
,文本
,没有
;电子邮件
,字符串
,255年
,没有
;createdAt
,datetime_immutable
,没有
。
Łączenie encji
Obie encje,会议
我评论
,powinny być泽sobąpowiązane。Konferencja może mieć零滑więcej komentarzy, nazywamy relacjąjeden做wielu(ang。一个许多)。
Użyj ponownie polecenia:实体
,赎zdefiniowaćtęrelacjęw klasie会议
:
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
你的实体已经存在!让我们添加一些新领域!新的属性名(按<返回>停止添加字段):>注释字段类型(输入?查看所有类型)[string]: >对这个实体应该与哪个班?:>评论一个新的属性也将被添加到评论类…新字段名在评论(会议):>是评论。会议性质允许null(可以为空)?(yes / no)[是]:>没有你想激活orphanRemoval你们的关系?评论是“孤儿”时从相关会议。例如$会议- > removeComment(评论美元)注:如果评论可能* *从一个会议到另一个改变,回答“不”。你想自动删除孤儿App \实体\评论对象(orphanRemoval) ?(yes / no)[不]:>是的更新:src /实体/会议。php更新:src /实体/ Comment.php
请注意
Jeśli wpiszesz吗?
jako odpowiedźw pytaniu o typ普拉,otrzymasz listęwszystkich obsługiwanych typow:
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
主要类型*文本字符串* *布尔*整数(或短整型、长整型数字)/协会* *浮动关系关系(一个向导将帮助您构建的关系)* ManyToOne * OneToMany * ManyToMany * OneToOne数组/对象类型*数组(或simple_array) * json对象* *二进制*团日期/时间* datetime类型(或datetime_immutable) * datetimetz(或datetimetz_immutable) *日期(或date_immutable) *时间(或time_immutable) * dateinterval其他类型*十进制* * json_array guid
Przyjrzyj sięliście rożnic国防后勤局兰encji阿宝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 @@类评论* /私人createdAt美元;+ # [ORM \ ManyToOne (inversedBy:“评论”)]+ # (ORM \ JoinColumn(可以为空:false))美元+私人会议会议;+公共函数getId (): int ?{返回$ this - > id;@@ -88、4 + 94,16美元@@类评论返回;}++公共职能getConference(): ?会议+ {+ $ this - >返回会议;+}++公共函数setConference (?会议会议美元):自我+ {= $ + $ this - >会议会议;+美元+返回;+}}- - - / src /实体/ Conference.php+ + + b / src /实体/ Conference.php@@ 2,6 + 2,8 @@名称空间的应用程序\实体;+使用原则\常见\ \ ArrayCollection集合;+使用原则\常见\集合\集合;使用原则\ ORM \ ORM映射;/ * * @@ -31 6 + 33岁16 @@类* /私人美元的国际会议;+ # [ORM \ OneToMany (targetEntity:评论::类的mappedBy:“会议”,orphanRemoval: true))+私人美元评论;++公共__construct()函数+ {+ $ this - >评论= new ArrayCollection ();+}+公共函数getId (): int ?{返回$ this - > id;@@ -71、4 + 83,35美元@@类会议返回;}++ / * *+ * @return收集< int、评论>+ * /+公共职能getComments():收集+ {+返回$ this - >评论;+}++公共职能addComment(评论评论美元):自我+ {+如果(! $ this - >评论>包含(评论美元)){+ $ this - >评论[]= $评论;+ $评论- > setConference ($);+}+美元+返回;+}++公共职能removeComment(评论评论美元):自我+ {+如果($ this - >评论- >包含(评论美元)){+ $ this - >评论- > removeElement($评论);+ / /拥有端设置为null(除非已经改变了)+如果($评论- > getConference () = = = $) {+ $评论- > setConference(空);+}+}+美元+返回;+}}
Wszystko, czego potrzebujesz做zarządzania tąrelacją,zostało wygenerowane automatycznie。Poźniej kod możesz zmieniać木菠萝chcesz。
Dodawanie kolejnych atrybutow
Właśnie zdałem sobie sprawę,że zapomnieliśmy dodaćpewien atrybut w encji评论
:uczestnicy mogąchciećdołączyćzdjęcie z konferencji,赎zilustrowaćswoje opinie。
Uruchom:实体
jeszcze拉兹我dodaj atrybutphotoFilename
jako kolumnętypu字符串
。Pozwol jej przyjmowaćwartość零
,ponieważdodanie zdjęcia jest opcjonalne:
1
美元ob娱乐下载symfony控制台:实体发表评论
Migracja bazy danych
模型projektu składa sięteraz z dwoch właśnie wygenerowanych建议。
W kolejnym kroku musimy utworzyćtabele W bazie danych związane z naszymi encjami W PHP。
Biblioteka教义迁移对narzędzie idealnie dopasowane做迪高zadania。Została ona jużzainstalowana jako częśćzależnościorm
。
Migracja(ang。迁移)jest klasąktora opisuje zmiany wykonywane w bazie danych,赎z obecnego schematu przejśćna nowy, zdefiniowany w atrybutach encji。Ponieważbaza danych jest na razie pusta, migracja powinna składaćsięz operacji tworzących dwie tabele。
Zobaczmy co wygeneruje学说:
1
美元ob娱乐下载symfony控制台:迁移
Zwroćuwagęna wygenerowanąnazwępliku, ktora powinna przypominać迁移/ Version20191019083640.php
:
Aktualizacja lokalnej bazy danych
Możesz teraz uruchomićmigrację,赎zaktualizowaćschemat lokalnej bazy danych:
1
美元ob娱乐下载symfony控制台学说:迁移:迁移
Schemat lokalnej bazy danych jest teraz aktualny我przygotowany przechowywania niektorych danych。
Aktualizacja produkcyjnej bazy danych
Kroki potrzebne做wykonania migracji na produkcyjnej bazie danych sątakie相同的木菠萝te, ktore jużznasz: zatwierdźzmiany (ang。我wdrażaj提交)。
Podczas wdrażania projektu,平台。sh oprocz aktualizacji kodu uruchamia także migracjębazy danych, jeśli魏istnieje (wykrywa, czy istnieje polecenie原则:迁移:迁移
)。
Idąc dalej
- Bazy danych我学说ORMw aplikacjach ob娱乐下载Symfony;
- Samouczek ob娱乐下载SymfonyCasts学说;
- Wykorzystanie asocjacji我relacji教义;
- Dokumentacja DoctrineMigrationsBundle。
美元ob娱乐下载symfony控制台:实体会议