Описструктуриданих
Описструктуриданих
ДляроботизбазоюданихзPHPмибудемовикористовувати学说,набірбібліотек,якідопомагаютьрозробникамкеруватибазамиданих:教义DBAL(шаблонабстракціїбазиданих),教义ORM(бібліотекадляманіпулюваннявмістомнашоїбазиданихзвикористаннямоб'єктівPHP),і教义迁移。
ORMНалаштування学说
Як教义підключаєтьсядобазиданих吗?Рецепт教义додавфайлконфігурації配置/包/ doctrine.yaml
,якийміститьпараметридляпідключення。ОсновнимпараметромєDSNбазиданих——рядокщоміститьвсюінформаціюпроз'єднання:обліковідані,адреса,порттощо。Зазамовчуванням教义шукаєзміннусередовищаDATABASE_URL
。
Майжевсівстановленіпакетимаютьконфігураціювкаталозі配置/包/
。Значеннязазамовчуваннямздебільшогобулиретельнопідібранідляроботивбільшостізастосунків。
ДомовленостіпроіменуваннязміннихсередовищавSymfonob娱乐下载y
ВиможетевизначитипараметрDATABASE_URL
вручнууфайлі.env
або.env.local
。Насправді,завдякирецептупакета,випобачитеприкладDATABASE_URL
увашомуфайлі.env
。Алевіндоситьгроміздкий,оскількилокальнийпортPostgreSQL,щонадаєнам码头工人,можезмінюватися。Єкращийспосіб。
ЗамістьтогощобжорсткозадатизначенняDATABASE_URL
уфайлі,миможемододатипрефіксob娱乐下载
довсіхкоманд。Цедозволитьвиявитисервісизапущеніу码头工人і/чи平台。sh(коливідкритотунель)іавтоматичновстановитизміннусередовища。
码头工人组成й平台。shлегкопрацюютьізSymfob娱乐下载onyзавдякицимзміннимсередовища。
Перевіртевсідоступнізміннісередовища,виконавшикомандуob娱乐下载symfony var:出口
:
1
美元ob娱乐下载symfony var:出口
1 2
DATABASE_URL = postgres: / / app: ! ChangeMe ! @127.0.0.1:32781 /应用程序吗?sslmode = disable&charset = utf8 #……
Пам'ятаєтеім'ясервісу数据库
,щовикористовуєтьсяуконфігураціях码头工人іPlatform.sh吗?Іменасервісіввикористовуютьсяякпрефіксидлявизначеннязміннихсередовища,такихякDATABASE_URL
。ЯкщовашісервісиіменуютьсявідповіднододомовленостейSymfonyob娱乐下载,тододатковіналаштуваннянепотрібні。
请注意
Базаданихнеєєдинимсервісом,щовикористовуєдомовленостіSymfony。ob娱乐下载Цежстосуєтьсянаприклад,梅勒(череззміннусередовищаMAILER_DSN
)。
ЗміназначенняDATABASE_URLзазамовчуванняму.env
Мивсеоднозмінимофайл.env
дляналаштуваннязначенняDATABASE_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 /信使# # #
Чомуінформаціямаєдублюватисяудвохрізнихмісцях吗?Тому,щонадеякиххмарнихплатформахпідчасзбірки,URL-адресабазиданихможебутищеневідома,але教义потрібнознатипросистемукеруваннябазамиданих,щобстворитисвоюконфігурацію。Такимчином、адресаім'якористувачайпароль,насправді,немаютьзначення。
Створеннякласівсутностей
Конференціюможнаописатикількомавластивостями:
- Місто,деорганізованаконференція;
- Рікпроведенняконференції;
- Прапорець国际,щовказує,чиєконференціялокальноюабоміжнародною(SymfonyLiob娱乐下载veабоSymfonyCon)。
Бандл制造商можедопомогтинамзгенеруватисутність(классутності),якийявляєсобоюконференцію。
Тепернаставчасстворитисутність会议
:
1
美元ob娱乐下载symfony控制台:实体会议
Цякомандаєінтерактивною:вонадопоможевамвпроцесідодаваннявсіхнеобхіднихвластивостей。Використовуйтенаступнівідповіді(більшістьзнихвстановленозазамовчуванням,томувиможетепростонатискатиклавішу“输入”,щобзастосуватиїх):
城市
,字符串
,255年
,没有
;一年
,字符串
,4
,没有
;的国际
,布尔
,没有
。
Осьповнийвивідпідчасвиконаннякоманди:
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
Клас会议
знаходитьсяупросторіімен应用实体\ \
。
Командатакожзгенерувалакласрепозиторію原则:App \ Repository \ ConferenceRepository
。
Згенерованийкодвиглядаєнаступнимчином(тутнаводитьсятількиневеликачастинафайлу):
Звернітьувагу,щосамкласєпростимкласомPHP,непов'язанимз教义。Длядодаванняметаданихвикористовуютьсяатрибути,щодозволяють教义зв'язуватиклассутностізвідповідноютаблицеювбазіданих。
教义додалавластивістьid
,щобзберігатипервиннийключрядкавтаблицібазиданих。Цейключ(ORM \ Id ()
)генеруєтьсяавтоматично(ORM \ GeneratedValue ()
)задопомогоюстратегії,яказалежитьвідсистемикеруваннябазоюданих。
Теперзгенеруйтеклассутностідлякоментарівконференції:
1
美元ob娱乐下载symfony控制台:实体发表评论
Введітьнаступнівідповіді:
作者
,字符串
,255年
,没有
;文本
,文本
,没有
;电子邮件
,字符串
,255年
,没有
;createdAt
,datetime_immutable
,没有
。
Зв'язуваннясутностей
Двісутності,конференціятакоментар,маютьбутизв'язанимиміжсобою。Конференціяможематинульабобільшекоментарів,ценазиваєтьсязв'язкомодиндобагатьох。
Використовуйтекоманду:实体
щераз,щобдодатицейзв'язокуклас会议
:
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
请注意
Якщовивведете吗?
,уякостівідповідінапитанняпротипданих,тоотримаєтесписоквсіхпідтримуванихтипів:
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
Погляньтенаповнурізницюдлякласівсутностейпіслядодаваннязв'язку:
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(空);+}+}+美元+返回;+}}
Все,щовампотрібнодляуправліннязв'язком,булозгенерованодлявас。Післягенеруваннякодстаєвашим;сміливоналаштовуйтейоготак,яквамхочеться。
Додаваннядодатковихвластивостей
Ящойнозрозумів,щомизабулидодатиоднувластивістьдосутностікоментаря:відвідувачі,можливо,захочутьдолучитифотоконференції,щобпроілюструватисвоївраження。
Виконайтекоманду:实体
щеразтадодайтевластивість/стовпчикphotoFilename
зтипом字符串
,аледозвольтейомуматизначення零
,оскількипроцесзавантаженняфотоєнеобов'язковим:
1
美元ob娱乐下载symfony控制台:实体发表评论
Міграціябазиданих
Модельпроектутеперповністюописанадвомазгенерованимикласами。
Далінампотрібностворититаблицібазиданих,пов'язанізцимисутностямиPHP。
教义迁移ідеальнопідходитьдлятакогозавдання。Цейпакетвжевстановленоувиглядізалежностідляorm
。
Міграціяєкласом,щоописуєзміни,якінеобхіднідляоновленнясхемибазиданихізїїпоточногостанудонового,визначеноговатрибутахсутності。Оскількибазаданихпокищопорожня,міграціямаєскладатисязіствореннядвохновихтаблиць。
Подивімося,щогенерує学说:
1
美元ob娱乐下载symfony控制台:迁移
Звернітьувагуназгенерованеім'яфайлуувиводі(ім'я,схожена迁移/ Version20191019083640.php
)
Оновленнялокальноїбазиданих
Теперможназапуститизгенеровануміграцію,дляоновленнясхемилокальноїбазиданих:
1
美元ob娱乐下载symfony控制台学说:迁移:迁移
Схемалокальноїбазиданихтепероновленаіготовадозберіганнянашихданих。
Оновленнябазиданихупродакшн
Кроки,щонеобхіднідляміграціїбазиданихупродакшнтісамі,зякимививжезнайомі:фіксаціязмінірозгортання。
Підчасрозгортанняпроекту平台。shоновлюєкод,алетакожвиконуєміграціюбазиданих,якщотакає(вінвиявляє,чиіснуєкоманда原则:迁移:迁移
)。
Йдемодалі
- Базиданихі教条ORMузастосункахSyob娱乐下载mfony;
- НавчальнийпосібникSyob娱乐下载mfonyCasts:教义;
- Роботазасоціаціями/зв'язками教义;
- Документаціяпо教义迁移。
美元ob娱乐下载symfony控制台:实体会议