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