summaryrefslogtreecommitdiff
path: root/vendor/doctrine/orm/src/Mapping/ToOneOwningSideMapping.php
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2024-08-13 23:45:21 +0200
committerpolo <ordipolo@gmx.fr>2024-08-13 23:45:21 +0200
commitbf6655a534a6775d30cafa67bd801276bda1d98d (patch)
treec6381e3f6c81c33eab72508f410b165ba05f7e9c /vendor/doctrine/orm/src/Mapping/ToOneOwningSideMapping.php
parent94d67a4b51f8e62e7d518cce26a526ae1ec48278 (diff)
downloadAppliGestionPHP-bf6655a534a6775d30cafa67bd801276bda1d98d.zip
VERSION 0.2 doctrine ORM et entités
Diffstat (limited to 'vendor/doctrine/orm/src/Mapping/ToOneOwningSideMapping.php')
-rw-r--r--vendor/doctrine/orm/src/Mapping/ToOneOwningSideMapping.php212
1 files changed, 212 insertions, 0 deletions
diff --git a/vendor/doctrine/orm/src/Mapping/ToOneOwningSideMapping.php b/vendor/doctrine/orm/src/Mapping/ToOneOwningSideMapping.php
new file mode 100644
index 0000000..cb85afb
--- /dev/null
+++ b/vendor/doctrine/orm/src/Mapping/ToOneOwningSideMapping.php
@@ -0,0 +1,212 @@
1<?php
2
3declare(strict_types=1);
4
5namespace Doctrine\ORM\Mapping;
6
7use RuntimeException;
8
9use function array_flip;
10use function assert;
11use function count;
12use function trim;
13
14abstract class ToOneOwningSideMapping extends OwningSideMapping implements ToOneAssociationMapping
15{
16 /** @var array<string, string> */
17 public array $sourceToTargetKeyColumns = [];
18
19 /** @var array<string, string> */
20 public array $targetToSourceKeyColumns = [];
21
22 /** @var list<JoinColumnMapping> */
23 public array $joinColumns = [];
24
25 /** @var array<string, string> */
26 public array $joinColumnFieldNames = [];
27
28 /**
29 * @param array<string, mixed> $mappingArray
30 * @psalm-param array{
31 * fieldName: string,
32 * sourceEntity: class-string,
33 * targetEntity: class-string,
34 * cascade?: list<'persist'|'remove'|'detach'|'refresh'|'all'>,
35 * fetch?: ClassMetadata::FETCH_*|null,
36 * inherited?: class-string|null,
37 * declared?: class-string|null,
38 * cache?: array<mixed>|null,
39 * id?: bool|null,
40 * isOnDeleteCascade?: bool|null,
41 * originalClass?: class-string|null,
42 * originalField?: string|null,
43 * orphanRemoval?: bool,
44 * unique?: bool|null,
45 * joinTable?: mixed[]|null,
46 * type?: int,
47 * isOwningSide: bool,
48 * joinColumns?: mixed[]|null,
49 * } $mappingArray
50 */
51 public static function fromMappingArray(array $mappingArray): static
52 {
53 $joinColumns = $mappingArray['joinColumns'] ?? [];
54 unset($mappingArray['joinColumns']);
55
56 $instance = parent::fromMappingArray($mappingArray);
57 assert($instance->isToOneOwningSide());
58
59 foreach ($joinColumns as $column) {
60 $instance->joinColumns[] = JoinColumnMapping::fromMappingArray($column);
61 }
62
63 if ($instance->orphanRemoval) {
64 if (! $instance->isCascadeRemove()) {
65 $instance->cascade[] = 'remove';
66 }
67
68 $instance->unique = null;
69 }
70
71 return $instance;
72 }
73
74 /**
75 * @param mixed[] $mappingArray
76 * @param class-string $name
77 * @psalm-param array{
78 * fieldName: string,
79 * sourceEntity: class-string,
80 * targetEntity: class-string,
81 * cascade?: list<'persist'|'remove'|'detach'|'refresh'|'all'>,
82 * fetch?: ClassMetadata::FETCH_*|null,
83 * inherited?: class-string|null,
84 * declared?: class-string|null,
85 * cache?: array<mixed>|null,
86 * id?: bool|null,
87 * isOnDeleteCascade?: bool|null,
88 * originalClass?: class-string|null,
89 * originalField?: string|null,
90 * orphanRemoval?: bool,
91 * unique?: bool|null,
92 * joinTable?: mixed[]|null,
93 * type?: int,
94 * isOwningSide: bool,
95 * joinColumns?: mixed[]|null,
96 * } $mappingArray
97 */
98 public static function fromMappingArrayAndName(
99 array $mappingArray,
100 NamingStrategy $namingStrategy,
101 string $name,
102 array|null $table,
103 bool $isInheritanceTypeSingleTable,
104 ): static {
105 if (isset($mappingArray['joinColumns'])) {
106 foreach ($mappingArray['joinColumns'] as $index => $joinColumn) {
107 if (empty($joinColumn['name'])) {
108 $mappingArray['joinColumns'][$index]['name'] = $namingStrategy->joinColumnName($mappingArray['fieldName'], $name);
109 }
110 }
111 }
112
113 $mapping = static::fromMappingArray($mappingArray);
114
115 assert($mapping->isToOneOwningSide());
116 if (empty($mapping->joinColumns)) {
117 // Apply default join column
118 $mapping->joinColumns = [
119 JoinColumnMapping::fromMappingArray([
120 'name' => $namingStrategy->joinColumnName($mapping->fieldName, $name),
121 'referencedColumnName' => $namingStrategy->referenceColumnName(),
122 ]),
123 ];
124 }
125
126 $uniqueConstraintColumns = [];
127
128 foreach ($mapping->joinColumns as $joinColumn) {
129 if ($mapping->isOneToOne() && ! $isInheritanceTypeSingleTable) {
130 if (count($mapping->joinColumns) === 1) {
131 if (empty($mapping->id)) {
132 $joinColumn->unique = true;
133 }
134 } else {
135 $uniqueConstraintColumns[] = $joinColumn->name;
136 }
137 }
138
139 if (empty($joinColumn->referencedColumnName)) {
140 $joinColumn->referencedColumnName = $namingStrategy->referenceColumnName();
141 }
142
143 if ($joinColumn->name[0] === '`') {
144 $joinColumn->name = trim($joinColumn->name, '`');
145 $joinColumn->quoted = true;
146 }
147
148 if ($joinColumn->referencedColumnName[0] === '`') {
149 $joinColumn->referencedColumnName = trim($joinColumn->referencedColumnName, '`');
150 $joinColumn->quoted = true;
151 }
152
153 $mapping->sourceToTargetKeyColumns[$joinColumn->name] = $joinColumn->referencedColumnName;
154 $mapping->joinColumnFieldNames[$joinColumn->name] = $joinColumn->fieldName ?? $joinColumn->name;
155 }
156
157 if ($uniqueConstraintColumns) {
158 if (! $table) {
159 throw new RuntimeException('ClassMetadata::setTable() has to be called before defining a one to one relationship.');
160 }
161
162 $table['uniqueConstraints'][$mapping->fieldName . '_uniq'] = ['columns' => $uniqueConstraintColumns];
163 }
164
165 $mapping->targetToSourceKeyColumns = array_flip($mapping->sourceToTargetKeyColumns);
166
167 return $mapping;
168 }
169
170 public function offsetSet(mixed $offset, mixed $value): void
171 {
172 if ($offset === 'joinColumns') {
173 $joinColumns = [];
174 foreach ($value as $column) {
175 $joinColumns[] = JoinColumnMapping::fromMappingArray($column);
176 }
177
178 $this->joinColumns = $joinColumns;
179
180 return;
181 }
182
183 parent::offsetSet($offset, $value);
184 }
185
186 /** @return array<string, mixed> */
187 public function toArray(): array
188 {
189 $array = parent::toArray();
190
191 $joinColumns = [];
192 foreach ($array['joinColumns'] as $column) {
193 $joinColumns[] = (array) $column;
194 }
195
196 $array['joinColumns'] = $joinColumns;
197
198 return $array;
199 }
200
201 /** @return list<string> */
202 public function __sleep(): array
203 {
204 return [
205 ...parent::__sleep(),
206 'joinColumns',
207 'joinColumnFieldNames',
208 'sourceToTargetKeyColumns',
209 'targetToSourceKeyColumns',
210 ];
211 }
212}