Completed
Pull Request — 4.2 (#128)
by David
03:31
created
src/Mouf/Database/TDBM/Utils/DirectForeignKeyMethodDescriptor.php 1 patch
Indentation   +110 added lines, -110 removed lines patch added patch discarded remove patch
@@ -12,65 +12,65 @@  discard block
 block discarded – undo
12 12
  */
13 13
 class DirectForeignKeyMethodDescriptor implements MethodDescriptorInterface
14 14
 {
15
-    /**
16
-     * @var ForeignKeyConstraint
17
-     */
18
-    private $fk;
19
-
20
-    private $useAlternateName = false;
21
-    /**
22
-     * @var Table
23
-     */
24
-    private $mainTable;
25
-
26
-    /**
27
-     * @param ForeignKeyConstraint $fk        The foreign key pointing to our bean.
28
-     * @param Table                $mainTable The main table that is pointed to.
29
-     */
30
-    public function __construct(ForeignKeyConstraint $fk, Table $mainTable)
31
-    {
32
-        $this->fk = $fk;
33
-        $this->mainTable = $mainTable;
34
-    }
35
-
36
-    /**
37
-     * Returns the name of the method to be generated.
38
-     *
39
-     * @return string
40
-     */
41
-    public function getName() : string
42
-    {
43
-        if (!$this->useAlternateName) {
44
-            return 'get'.TDBMDaoGenerator::toCamelCase($this->fk->getLocalTableName());
45
-        } else {
46
-            $methodName = 'get'.TDBMDaoGenerator::toCamelCase($this->fk->getLocalTableName()).'By';
47
-
48
-            $camelizedColumns = array_map([TDBMDaoGenerator::class, 'toCamelCase'], $this->fk->getLocalColumns());
49
-
50
-            $methodName .= implode('And', $camelizedColumns);
51
-
52
-            return $methodName;
53
-        }
54
-    }
55
-
56
-    /**
57
-     * Requests the use of an alternative name for this method.
58
-     */
59
-    public function useAlternativeName()
60
-    {
61
-        $this->useAlternateName = true;
62
-    }
63
-
64
-    /**
65
-     * Returns the code of the method.
66
-     *
67
-     * @return string
68
-     */
69
-    public function getCode() : string
70
-    {
71
-        $code = '';
72
-
73
-        $getterCode = '    /**
15
+	/**
16
+	 * @var ForeignKeyConstraint
17
+	 */
18
+	private $fk;
19
+
20
+	private $useAlternateName = false;
21
+	/**
22
+	 * @var Table
23
+	 */
24
+	private $mainTable;
25
+
26
+	/**
27
+	 * @param ForeignKeyConstraint $fk        The foreign key pointing to our bean.
28
+	 * @param Table                $mainTable The main table that is pointed to.
29
+	 */
30
+	public function __construct(ForeignKeyConstraint $fk, Table $mainTable)
31
+	{
32
+		$this->fk = $fk;
33
+		$this->mainTable = $mainTable;
34
+	}
35
+
36
+	/**
37
+	 * Returns the name of the method to be generated.
38
+	 *
39
+	 * @return string
40
+	 */
41
+	public function getName() : string
42
+	{
43
+		if (!$this->useAlternateName) {
44
+			return 'get'.TDBMDaoGenerator::toCamelCase($this->fk->getLocalTableName());
45
+		} else {
46
+			$methodName = 'get'.TDBMDaoGenerator::toCamelCase($this->fk->getLocalTableName()).'By';
47
+
48
+			$camelizedColumns = array_map([TDBMDaoGenerator::class, 'toCamelCase'], $this->fk->getLocalColumns());
49
+
50
+			$methodName .= implode('And', $camelizedColumns);
51
+
52
+			return $methodName;
53
+		}
54
+	}
55
+
56
+	/**
57
+	 * Requests the use of an alternative name for this method.
58
+	 */
59
+	public function useAlternativeName()
60
+	{
61
+		$this->useAlternateName = true;
62
+	}
63
+
64
+	/**
65
+	 * Returns the code of the method.
66
+	 *
67
+	 * @return string
68
+	 */
69
+	public function getCode() : string
70
+	{
71
+		$code = '';
72
+
73
+		$getterCode = '    /**
74 74
      * Returns the list of %s pointing to this bean via the %s column.
75 75
      *
76 76
      * @return %s[]|AlterableResultIterator
@@ -82,55 +82,55 @@  discard block
 block discarded – undo
82 82
 
83 83
 ';
84 84
 
85
-        $beanClass = TDBMDaoGenerator::getBeanNameFromTableName($this->fk->getLocalTableName());
86
-        $code .= sprintf($getterCode,
87
-            $beanClass,
88
-            implode(', ', $this->fk->getColumns()),
89
-            $beanClass,
90
-            $this->getName(),
91
-            var_export($this->fk->getLocalTableName(), true),
92
-            var_export($this->fk->getName(), true),
93
-            var_export($this->fk->getLocalTableName(), true),
94
-            $this->getFilters($this->fk)
95
-        );
96
-
97
-        return $code;
98
-    }
99
-
100
-    private function getFilters(ForeignKeyConstraint $fk) : string
101
-    {
102
-        $counter = 0;
103
-        $parameters = [];
104
-
105
-        $pkColumns = $this->mainTable->getPrimaryKeyColumns();
106
-
107
-        foreach ($fk->getLocalColumns() as $columnName) {
108
-            $pkColumn = $pkColumns[$counter];
109
-            $parameters[] = sprintf('%s => $this->get(%s, %s)', var_export($fk->getLocalTableName().'.'.$columnName, true), var_export($pkColumn, true), var_export($this->fk->getForeignTableName(), true));
110
-            ++$counter;
111
-        }
112
-        $parametersCode = '['.implode(', ', $parameters).']';
113
-
114
-        return $parametersCode;
115
-    }
116
-
117
-    /**
118
-     * Returns an array of classes that needs a "use" for this method.
119
-     *
120
-     * @return string[]
121
-     */
122
-    public function getUsedClasses() : array
123
-    {
124
-        return [TDBMDaoGenerator::getBeanNameFromTableName($this->fk->getForeignTableName())];
125
-    }
126
-
127
-    /**
128
-     * Returns the code to past in jsonSerialize.
129
-     *
130
-     * @return string
131
-     */
132
-    public function getJsonSerializeCode() : string
133
-    {
134
-        return '';
135
-    }
85
+		$beanClass = TDBMDaoGenerator::getBeanNameFromTableName($this->fk->getLocalTableName());
86
+		$code .= sprintf($getterCode,
87
+			$beanClass,
88
+			implode(', ', $this->fk->getColumns()),
89
+			$beanClass,
90
+			$this->getName(),
91
+			var_export($this->fk->getLocalTableName(), true),
92
+			var_export($this->fk->getName(), true),
93
+			var_export($this->fk->getLocalTableName(), true),
94
+			$this->getFilters($this->fk)
95
+		);
96
+
97
+		return $code;
98
+	}
99
+
100
+	private function getFilters(ForeignKeyConstraint $fk) : string
101
+	{
102
+		$counter = 0;
103
+		$parameters = [];
104
+
105
+		$pkColumns = $this->mainTable->getPrimaryKeyColumns();
106
+
107
+		foreach ($fk->getLocalColumns() as $columnName) {
108
+			$pkColumn = $pkColumns[$counter];
109
+			$parameters[] = sprintf('%s => $this->get(%s, %s)', var_export($fk->getLocalTableName().'.'.$columnName, true), var_export($pkColumn, true), var_export($this->fk->getForeignTableName(), true));
110
+			++$counter;
111
+		}
112
+		$parametersCode = '['.implode(', ', $parameters).']';
113
+
114
+		return $parametersCode;
115
+	}
116
+
117
+	/**
118
+	 * Returns an array of classes that needs a "use" for this method.
119
+	 *
120
+	 * @return string[]
121
+	 */
122
+	public function getUsedClasses() : array
123
+	{
124
+		return [TDBMDaoGenerator::getBeanNameFromTableName($this->fk->getForeignTableName())];
125
+	}
126
+
127
+	/**
128
+	 * Returns the code to past in jsonSerialize.
129
+	 *
130
+	 * @return string
131
+	 */
132
+	public function getJsonSerializeCode() : string
133
+	{
134
+		return '';
135
+	}
136 136
 }
Please login to merge, or discard this patch.
src/Mouf/Database/TDBM/Utils/BeanDescriptor.php 2 patches
Indentation   +543 added lines, -543 removed lines patch added patch discarded remove patch
@@ -16,228 +16,228 @@  discard block
 block discarded – undo
16 16
  */
17 17
 class BeanDescriptor
18 18
 {
19
-    /**
20
-     * @var Table
21
-     */
22
-    private $table;
23
-
24
-    /**
25
-     * @var SchemaAnalyzer
26
-     */
27
-    private $schemaAnalyzer;
28
-
29
-    /**
30
-     * @var Schema
31
-     */
32
-    private $schema;
33
-
34
-    /**
35
-     * @var AbstractBeanPropertyDescriptor[]
36
-     */
37
-    private $beanPropertyDescriptors = [];
38
-
39
-    /**
40
-     * @var TDBMSchemaAnalyzer
41
-     */
42
-    private $tdbmSchemaAnalyzer;
43
-
44
-    public function __construct(Table $table, SchemaAnalyzer $schemaAnalyzer, Schema $schema, TDBMSchemaAnalyzer $tdbmSchemaAnalyzer)
45
-    {
46
-        $this->table = $table;
47
-        $this->schemaAnalyzer = $schemaAnalyzer;
48
-        $this->schema = $schema;
49
-        $this->tdbmSchemaAnalyzer = $tdbmSchemaAnalyzer;
50
-        $this->initBeanPropertyDescriptors();
51
-    }
52
-
53
-    private function initBeanPropertyDescriptors()
54
-    {
55
-        $this->beanPropertyDescriptors = $this->getProperties($this->table);
56
-    }
57
-
58
-    /**
59
-     * Returns the foreign-key the column is part of, if any. null otherwise.
60
-     *
61
-     * @param Table  $table
62
-     * @param Column $column
63
-     *
64
-     * @return ForeignKeyConstraint|null
65
-     */
66
-    private function isPartOfForeignKey(Table $table, Column $column)
67
-    {
68
-        $localColumnName = $column->getName();
69
-        foreach ($table->getForeignKeys() as $foreignKey) {
70
-            foreach ($foreignKey->getColumns() as $columnName) {
71
-                if ($columnName === $localColumnName) {
72
-                    return $foreignKey;
73
-                }
74
-            }
75
-        }
76
-
77
-        return;
78
-    }
79
-
80
-    /**
81
-     * @return AbstractBeanPropertyDescriptor[]
82
-     */
83
-    public function getBeanPropertyDescriptors()
84
-    {
85
-        return $this->beanPropertyDescriptors;
86
-    }
87
-
88
-    /**
89
-     * Returns the list of columns that are not nullable and not autogenerated for a given table and its parent.
90
-     *
91
-     * @return AbstractBeanPropertyDescriptor[]
92
-     */
93
-    public function getConstructorProperties()
94
-    {
95
-        $constructorProperties = array_filter($this->beanPropertyDescriptors, function (AbstractBeanPropertyDescriptor $property) {
96
-            return $property->isCompulsory();
97
-        });
98
-
99
-        return $constructorProperties;
100
-    }
101
-
102
-    /**
103
-     * Returns the list of columns that have default values for a given table.
104
-     *
105
-     * @return AbstractBeanPropertyDescriptor[]
106
-     */
107
-    public function getPropertiesWithDefault()
108
-    {
109
-        $properties = $this->getPropertiesForTable($this->table);
110
-        $defaultProperties = array_filter($properties, function (AbstractBeanPropertyDescriptor $property) {
111
-            return $property->hasDefault();
112
-        });
113
-
114
-        return $defaultProperties;
115
-    }
116
-
117
-    /**
118
-     * Returns the list of properties exposed as getters and setters in this class.
119
-     *
120
-     * @return AbstractBeanPropertyDescriptor[]
121
-     */
122
-    public function getExposedProperties()
123
-    {
124
-        $exposedProperties = array_filter($this->beanPropertyDescriptors, function (AbstractBeanPropertyDescriptor $property) {
125
-            return $property->getTable()->getName() == $this->table->getName();
126
-        });
127
-
128
-        return $exposedProperties;
129
-    }
130
-
131
-    /**
132
-     * Returns the list of properties for this table (including parent tables).
133
-     *
134
-     * @param Table $table
135
-     *
136
-     * @return AbstractBeanPropertyDescriptor[]
137
-     */
138
-    private function getProperties(Table $table)
139
-    {
140
-        $parentRelationship = $this->schemaAnalyzer->getParentRelationship($table->getName());
141
-        if ($parentRelationship) {
142
-            $parentTable = $this->schema->getTable($parentRelationship->getForeignTableName());
143
-            $properties = $this->getProperties($parentTable);
144
-            // we merge properties by overriding property names.
145
-            $localProperties = $this->getPropertiesForTable($table);
146
-            foreach ($localProperties as $name => $property) {
147
-                // We do not override properties if this is a primary key!
148
-                if ($property->isPrimaryKey()) {
149
-                    continue;
150
-                }
151
-                $properties[$name] = $property;
152
-            }
153
-        } else {
154
-            $properties = $this->getPropertiesForTable($table);
155
-        }
156
-
157
-        return $properties;
158
-    }
159
-
160
-    /**
161
-     * Returns the list of properties for this table (ignoring parent tables).
162
-     *
163
-     * @param Table $table
164
-     *
165
-     * @return AbstractBeanPropertyDescriptor[]
166
-     */
167
-    private function getPropertiesForTable(Table $table)
168
-    {
169
-        $parentRelationship = $this->schemaAnalyzer->getParentRelationship($table->getName());
170
-        if ($parentRelationship) {
171
-            $ignoreColumns = $parentRelationship->getLocalColumns();
172
-        } else {
173
-            $ignoreColumns = [];
174
-        }
175
-
176
-        $beanPropertyDescriptors = [];
177
-
178
-        foreach ($table->getColumns() as $column) {
179
-            if (array_search($column->getName(), $ignoreColumns) !== false) {
180
-                continue;
181
-            }
182
-
183
-            $fk = $this->isPartOfForeignKey($table, $column);
184
-            if ($fk !== null) {
185
-                // Check that previously added descriptors are not added on same FK (can happen with multi key FK).
186
-                foreach ($beanPropertyDescriptors as $beanDescriptor) {
187
-                    if ($beanDescriptor instanceof ObjectBeanPropertyDescriptor && $beanDescriptor->getForeignKey() === $fk) {
188
-                        continue 2;
189
-                    }
190
-                }
191
-                // Check that this property is not an inheritance relationship
192
-                $parentRelationship = $this->schemaAnalyzer->getParentRelationship($table->getName());
193
-                if ($parentRelationship === $fk) {
194
-                    continue;
195
-                }
196
-
197
-                $beanPropertyDescriptors[] = new ObjectBeanPropertyDescriptor($table, $fk, $this->schemaAnalyzer);
198
-            } else {
199
-                $beanPropertyDescriptors[] = new ScalarBeanPropertyDescriptor($table, $column);
200
-            }
201
-        }
202
-
203
-        // Now, let's get the name of all properties and let's check there is no duplicate.
204
-        /** @var $names AbstractBeanPropertyDescriptor[] */
205
-        $names = [];
206
-        foreach ($beanPropertyDescriptors as $beanDescriptor) {
207
-            $name = $beanDescriptor->getUpperCamelCaseName();
208
-            if (isset($names[$name])) {
209
-                $names[$name]->useAlternativeName();
210
-                $beanDescriptor->useAlternativeName();
211
-            } else {
212
-                $names[$name] = $beanDescriptor;
213
-            }
214
-        }
215
-
216
-        // Final check (throw exceptions if problem arises)
217
-        $names = [];
218
-        foreach ($beanPropertyDescriptors as $beanDescriptor) {
219
-            $name = $beanDescriptor->getUpperCamelCaseName();
220
-            if (isset($names[$name])) {
221
-                throw new TDBMException('Unsolvable name conflict while generating method name');
222
-            } else {
223
-                $names[$name] = $beanDescriptor;
224
-            }
225
-        }
226
-
227
-        // Last step, let's rebuild the list with a map:
228
-        $beanPropertyDescriptorsMap = [];
229
-        foreach ($beanPropertyDescriptors as $beanDescriptor) {
230
-            $beanPropertyDescriptorsMap[$beanDescriptor->getLowerCamelCaseName()] = $beanDescriptor;
231
-        }
232
-
233
-        return $beanPropertyDescriptorsMap;
234
-    }
235
-
236
-    public function generateBeanConstructor()
237
-    {
238
-        $constructorProperties = $this->getConstructorProperties();
239
-
240
-        $constructorCode = '    /**
19
+	/**
20
+	 * @var Table
21
+	 */
22
+	private $table;
23
+
24
+	/**
25
+	 * @var SchemaAnalyzer
26
+	 */
27
+	private $schemaAnalyzer;
28
+
29
+	/**
30
+	 * @var Schema
31
+	 */
32
+	private $schema;
33
+
34
+	/**
35
+	 * @var AbstractBeanPropertyDescriptor[]
36
+	 */
37
+	private $beanPropertyDescriptors = [];
38
+
39
+	/**
40
+	 * @var TDBMSchemaAnalyzer
41
+	 */
42
+	private $tdbmSchemaAnalyzer;
43
+
44
+	public function __construct(Table $table, SchemaAnalyzer $schemaAnalyzer, Schema $schema, TDBMSchemaAnalyzer $tdbmSchemaAnalyzer)
45
+	{
46
+		$this->table = $table;
47
+		$this->schemaAnalyzer = $schemaAnalyzer;
48
+		$this->schema = $schema;
49
+		$this->tdbmSchemaAnalyzer = $tdbmSchemaAnalyzer;
50
+		$this->initBeanPropertyDescriptors();
51
+	}
52
+
53
+	private function initBeanPropertyDescriptors()
54
+	{
55
+		$this->beanPropertyDescriptors = $this->getProperties($this->table);
56
+	}
57
+
58
+	/**
59
+	 * Returns the foreign-key the column is part of, if any. null otherwise.
60
+	 *
61
+	 * @param Table  $table
62
+	 * @param Column $column
63
+	 *
64
+	 * @return ForeignKeyConstraint|null
65
+	 */
66
+	private function isPartOfForeignKey(Table $table, Column $column)
67
+	{
68
+		$localColumnName = $column->getName();
69
+		foreach ($table->getForeignKeys() as $foreignKey) {
70
+			foreach ($foreignKey->getColumns() as $columnName) {
71
+				if ($columnName === $localColumnName) {
72
+					return $foreignKey;
73
+				}
74
+			}
75
+		}
76
+
77
+		return;
78
+	}
79
+
80
+	/**
81
+	 * @return AbstractBeanPropertyDescriptor[]
82
+	 */
83
+	public function getBeanPropertyDescriptors()
84
+	{
85
+		return $this->beanPropertyDescriptors;
86
+	}
87
+
88
+	/**
89
+	 * Returns the list of columns that are not nullable and not autogenerated for a given table and its parent.
90
+	 *
91
+	 * @return AbstractBeanPropertyDescriptor[]
92
+	 */
93
+	public function getConstructorProperties()
94
+	{
95
+		$constructorProperties = array_filter($this->beanPropertyDescriptors, function (AbstractBeanPropertyDescriptor $property) {
96
+			return $property->isCompulsory();
97
+		});
98
+
99
+		return $constructorProperties;
100
+	}
101
+
102
+	/**
103
+	 * Returns the list of columns that have default values for a given table.
104
+	 *
105
+	 * @return AbstractBeanPropertyDescriptor[]
106
+	 */
107
+	public function getPropertiesWithDefault()
108
+	{
109
+		$properties = $this->getPropertiesForTable($this->table);
110
+		$defaultProperties = array_filter($properties, function (AbstractBeanPropertyDescriptor $property) {
111
+			return $property->hasDefault();
112
+		});
113
+
114
+		return $defaultProperties;
115
+	}
116
+
117
+	/**
118
+	 * Returns the list of properties exposed as getters and setters in this class.
119
+	 *
120
+	 * @return AbstractBeanPropertyDescriptor[]
121
+	 */
122
+	public function getExposedProperties()
123
+	{
124
+		$exposedProperties = array_filter($this->beanPropertyDescriptors, function (AbstractBeanPropertyDescriptor $property) {
125
+			return $property->getTable()->getName() == $this->table->getName();
126
+		});
127
+
128
+		return $exposedProperties;
129
+	}
130
+
131
+	/**
132
+	 * Returns the list of properties for this table (including parent tables).
133
+	 *
134
+	 * @param Table $table
135
+	 *
136
+	 * @return AbstractBeanPropertyDescriptor[]
137
+	 */
138
+	private function getProperties(Table $table)
139
+	{
140
+		$parentRelationship = $this->schemaAnalyzer->getParentRelationship($table->getName());
141
+		if ($parentRelationship) {
142
+			$parentTable = $this->schema->getTable($parentRelationship->getForeignTableName());
143
+			$properties = $this->getProperties($parentTable);
144
+			// we merge properties by overriding property names.
145
+			$localProperties = $this->getPropertiesForTable($table);
146
+			foreach ($localProperties as $name => $property) {
147
+				// We do not override properties if this is a primary key!
148
+				if ($property->isPrimaryKey()) {
149
+					continue;
150
+				}
151
+				$properties[$name] = $property;
152
+			}
153
+		} else {
154
+			$properties = $this->getPropertiesForTable($table);
155
+		}
156
+
157
+		return $properties;
158
+	}
159
+
160
+	/**
161
+	 * Returns the list of properties for this table (ignoring parent tables).
162
+	 *
163
+	 * @param Table $table
164
+	 *
165
+	 * @return AbstractBeanPropertyDescriptor[]
166
+	 */
167
+	private function getPropertiesForTable(Table $table)
168
+	{
169
+		$parentRelationship = $this->schemaAnalyzer->getParentRelationship($table->getName());
170
+		if ($parentRelationship) {
171
+			$ignoreColumns = $parentRelationship->getLocalColumns();
172
+		} else {
173
+			$ignoreColumns = [];
174
+		}
175
+
176
+		$beanPropertyDescriptors = [];
177
+
178
+		foreach ($table->getColumns() as $column) {
179
+			if (array_search($column->getName(), $ignoreColumns) !== false) {
180
+				continue;
181
+			}
182
+
183
+			$fk = $this->isPartOfForeignKey($table, $column);
184
+			if ($fk !== null) {
185
+				// Check that previously added descriptors are not added on same FK (can happen with multi key FK).
186
+				foreach ($beanPropertyDescriptors as $beanDescriptor) {
187
+					if ($beanDescriptor instanceof ObjectBeanPropertyDescriptor && $beanDescriptor->getForeignKey() === $fk) {
188
+						continue 2;
189
+					}
190
+				}
191
+				// Check that this property is not an inheritance relationship
192
+				$parentRelationship = $this->schemaAnalyzer->getParentRelationship($table->getName());
193
+				if ($parentRelationship === $fk) {
194
+					continue;
195
+				}
196
+
197
+				$beanPropertyDescriptors[] = new ObjectBeanPropertyDescriptor($table, $fk, $this->schemaAnalyzer);
198
+			} else {
199
+				$beanPropertyDescriptors[] = new ScalarBeanPropertyDescriptor($table, $column);
200
+			}
201
+		}
202
+
203
+		// Now, let's get the name of all properties and let's check there is no duplicate.
204
+		/** @var $names AbstractBeanPropertyDescriptor[] */
205
+		$names = [];
206
+		foreach ($beanPropertyDescriptors as $beanDescriptor) {
207
+			$name = $beanDescriptor->getUpperCamelCaseName();
208
+			if (isset($names[$name])) {
209
+				$names[$name]->useAlternativeName();
210
+				$beanDescriptor->useAlternativeName();
211
+			} else {
212
+				$names[$name] = $beanDescriptor;
213
+			}
214
+		}
215
+
216
+		// Final check (throw exceptions if problem arises)
217
+		$names = [];
218
+		foreach ($beanPropertyDescriptors as $beanDescriptor) {
219
+			$name = $beanDescriptor->getUpperCamelCaseName();
220
+			if (isset($names[$name])) {
221
+				throw new TDBMException('Unsolvable name conflict while generating method name');
222
+			} else {
223
+				$names[$name] = $beanDescriptor;
224
+			}
225
+		}
226
+
227
+		// Last step, let's rebuild the list with a map:
228
+		$beanPropertyDescriptorsMap = [];
229
+		foreach ($beanPropertyDescriptors as $beanDescriptor) {
230
+			$beanPropertyDescriptorsMap[$beanDescriptor->getLowerCamelCaseName()] = $beanDescriptor;
231
+		}
232
+
233
+		return $beanPropertyDescriptorsMap;
234
+	}
235
+
236
+	public function generateBeanConstructor()
237
+	{
238
+		$constructorProperties = $this->getConstructorProperties();
239
+
240
+		$constructorCode = '    /**
241 241
      * The constructor takes all compulsory arguments.
242 242
      *
243 243
 %s
@@ -248,110 +248,110 @@  discard block
 block discarded – undo
248 248
     }
249 249
     ';
250 250
 
251
-        $paramAnnotations = [];
252
-        $arguments = [];
253
-        $assigns = [];
254
-        $parentConstructorArguments = [];
255
-
256
-        foreach ($constructorProperties as $property) {
257
-            $className = $property->getClassName();
258
-            if ($className) {
259
-                $arguments[] = $className.' '.$property->getVariableName();
260
-            } else {
261
-                $arguments[] = $property->getVariableName();
262
-            }
263
-            $paramAnnotations[] = $property->getParamAnnotation();
264
-            if ($property->getTable()->getName() === $this->table->getName()) {
265
-                $assigns[] = $property->getConstructorAssignCode();
266
-            } else {
267
-                $parentConstructorArguments[] = $property->getVariableName();
268
-            }
269
-        }
270
-
271
-        $parentConstructorCode = sprintf("        parent::__construct(%s);\n", implode(', ', $parentConstructorArguments));
272
-
273
-        foreach ($this->getPropertiesWithDefault() as $property) {
274
-            $assigns[] = $property->assignToDefaultCode();
275
-        }
276
-
277
-        return sprintf($constructorCode, implode("\n", $paramAnnotations), implode(', ', $arguments), $parentConstructorCode, implode("\n", $assigns));
278
-    }
279
-
280
-    public function getDirectForeignKeysDescriptors()
281
-    {
282
-        $fks = $this->tdbmSchemaAnalyzer->getIncomingForeignKeys($this->table->getName());
283
-
284
-        $descriptors = [];
285
-
286
-        foreach ($fks as $fk) {
287
-            $descriptors[] = new DirectForeignKeyMethodDescriptor($fk, $this->table);
288
-        }
289
-
290
-        return $descriptors;
291
-    }
292
-
293
-    private function getPivotTableDescriptors()
294
-    {
295
-        $descs = [];
296
-        foreach ($this->schemaAnalyzer->detectJunctionTables(true) as $table) {
297
-            // There are exactly 2 FKs since this is a pivot table.
298
-            $fks = array_values($table->getForeignKeys());
299
-
300
-            if ($fks[0]->getForeignTableName() === $this->table->getName()) {
301
-                list($localFk, $remoteFk) = $fks;
302
-            } elseif ($fks[1]->getForeignTableName() === $this->table->getName()) {
303
-                list($remoteFk, $localFk) = $fks;
304
-            } else {
305
-                continue;
306
-            }
307
-
308
-            $descs[] = new PivotTableMethodsDescriptor($table, $localFk, $remoteFk);
309
-        }
310
-
311
-        return $descs;
312
-    }
313
-
314
-    /**
315
-     * Returns the list of method descriptors (and applies the alternative name if needed).
316
-     *
317
-     * @return MethodDescriptorInterface[]
318
-     */
319
-    private function getMethodDescriptors()
320
-    {
321
-        $directForeignKeyDescriptors = $this->getDirectForeignKeysDescriptors();
322
-        $pivotTableDescriptors = $this->getPivotTableDescriptors();
323
-
324
-        $descriptors = array_merge($directForeignKeyDescriptors, $pivotTableDescriptors);
325
-
326
-        // Descriptors by method names
327
-        $descriptorsByMethodName = [];
328
-
329
-        foreach ($descriptors as $descriptor) {
330
-            $descriptorsByMethodName[$descriptor->getName()][] = $descriptor;
331
-        }
332
-
333
-        foreach ($descriptorsByMethodName as $descriptorsForMethodName) {
334
-            if (count($descriptorsForMethodName) > 1) {
335
-                foreach ($descriptorsForMethodName as $descriptor) {
336
-                    $descriptor->useAlternativeName();
337
-                }
338
-            }
339
-        }
340
-
341
-        return $descriptors;
342
-    }
343
-
344
-    public function generateJsonSerialize()
345
-    {
346
-        $tableName = $this->table->getName();
347
-        $parentFk = $this->schemaAnalyzer->getParentRelationship($tableName);
348
-        if ($parentFk !== null) {
349
-            $initializer = '$array = parent::jsonSerialize($stopRecursion);';
350
-        } else {
351
-            $initializer = '$array = [];';
352
-        }
353
-
354
-        $str = '
251
+		$paramAnnotations = [];
252
+		$arguments = [];
253
+		$assigns = [];
254
+		$parentConstructorArguments = [];
255
+
256
+		foreach ($constructorProperties as $property) {
257
+			$className = $property->getClassName();
258
+			if ($className) {
259
+				$arguments[] = $className.' '.$property->getVariableName();
260
+			} else {
261
+				$arguments[] = $property->getVariableName();
262
+			}
263
+			$paramAnnotations[] = $property->getParamAnnotation();
264
+			if ($property->getTable()->getName() === $this->table->getName()) {
265
+				$assigns[] = $property->getConstructorAssignCode();
266
+			} else {
267
+				$parentConstructorArguments[] = $property->getVariableName();
268
+			}
269
+		}
270
+
271
+		$parentConstructorCode = sprintf("        parent::__construct(%s);\n", implode(', ', $parentConstructorArguments));
272
+
273
+		foreach ($this->getPropertiesWithDefault() as $property) {
274
+			$assigns[] = $property->assignToDefaultCode();
275
+		}
276
+
277
+		return sprintf($constructorCode, implode("\n", $paramAnnotations), implode(', ', $arguments), $parentConstructorCode, implode("\n", $assigns));
278
+	}
279
+
280
+	public function getDirectForeignKeysDescriptors()
281
+	{
282
+		$fks = $this->tdbmSchemaAnalyzer->getIncomingForeignKeys($this->table->getName());
283
+
284
+		$descriptors = [];
285
+
286
+		foreach ($fks as $fk) {
287
+			$descriptors[] = new DirectForeignKeyMethodDescriptor($fk, $this->table);
288
+		}
289
+
290
+		return $descriptors;
291
+	}
292
+
293
+	private function getPivotTableDescriptors()
294
+	{
295
+		$descs = [];
296
+		foreach ($this->schemaAnalyzer->detectJunctionTables(true) as $table) {
297
+			// There are exactly 2 FKs since this is a pivot table.
298
+			$fks = array_values($table->getForeignKeys());
299
+
300
+			if ($fks[0]->getForeignTableName() === $this->table->getName()) {
301
+				list($localFk, $remoteFk) = $fks;
302
+			} elseif ($fks[1]->getForeignTableName() === $this->table->getName()) {
303
+				list($remoteFk, $localFk) = $fks;
304
+			} else {
305
+				continue;
306
+			}
307
+
308
+			$descs[] = new PivotTableMethodsDescriptor($table, $localFk, $remoteFk);
309
+		}
310
+
311
+		return $descs;
312
+	}
313
+
314
+	/**
315
+	 * Returns the list of method descriptors (and applies the alternative name if needed).
316
+	 *
317
+	 * @return MethodDescriptorInterface[]
318
+	 */
319
+	private function getMethodDescriptors()
320
+	{
321
+		$directForeignKeyDescriptors = $this->getDirectForeignKeysDescriptors();
322
+		$pivotTableDescriptors = $this->getPivotTableDescriptors();
323
+
324
+		$descriptors = array_merge($directForeignKeyDescriptors, $pivotTableDescriptors);
325
+
326
+		// Descriptors by method names
327
+		$descriptorsByMethodName = [];
328
+
329
+		foreach ($descriptors as $descriptor) {
330
+			$descriptorsByMethodName[$descriptor->getName()][] = $descriptor;
331
+		}
332
+
333
+		foreach ($descriptorsByMethodName as $descriptorsForMethodName) {
334
+			if (count($descriptorsForMethodName) > 1) {
335
+				foreach ($descriptorsForMethodName as $descriptor) {
336
+					$descriptor->useAlternativeName();
337
+				}
338
+			}
339
+		}
340
+
341
+		return $descriptors;
342
+	}
343
+
344
+	public function generateJsonSerialize()
345
+	{
346
+		$tableName = $this->table->getName();
347
+		$parentFk = $this->schemaAnalyzer->getParentRelationship($tableName);
348
+		if ($parentFk !== null) {
349
+			$initializer = '$array = parent::jsonSerialize($stopRecursion);';
350
+		} else {
351
+			$initializer = '$array = [];';
352
+		}
353
+
354
+		$str = '
355 355
     /**
356 356
      * Serializes the object for JSON encoding.
357 357
      *
@@ -367,76 +367,76 @@  discard block
 block discarded – undo
367 367
     }
368 368
 ';
369 369
 
370
-        $propertiesCode = '';
371
-        foreach ($this->beanPropertyDescriptors as $beanPropertyDescriptor) {
372
-            $propertiesCode .= $beanPropertyDescriptor->getJsonSerializeCode();
373
-        }
374
-
375
-        // Many2many relationships
376
-        $methodsCode = '';
377
-        foreach ($this->getMethodDescriptors() as $methodDescriptor) {
378
-            $methodsCode .= $methodDescriptor->getJsonSerializeCode();
379
-        }
380
-
381
-        return sprintf($str, $initializer, $propertiesCode, $methodsCode);
382
-    }
383
-
384
-    /**
385
-     * Returns as an array the class we need to extend from and the list of use statements.
386
-     *
387
-     * @return array
388
-     */
389
-    private function generateExtendsAndUseStatements(ForeignKeyConstraint $parentFk = null)
390
-    {
391
-        $classes = [];
392
-        if ($parentFk !== null) {
393
-            $extends = TDBMDaoGenerator::getBeanNameFromTableName($parentFk->getForeignTableName());
394
-            $classes[] = $extends;
395
-        }
396
-
397
-        foreach ($this->getBeanPropertyDescriptors() as $beanPropertyDescriptor) {
398
-            $className = $beanPropertyDescriptor->getClassName();
399
-            if (null !== $className) {
400
-                $classes[] = $beanPropertyDescriptor->getClassName();
401
-            }
402
-        }
403
-
404
-        foreach ($this->getMethodDescriptors() as $descriptor) {
405
-            $classes = array_merge($classes, $descriptor->getUsedClasses());
406
-        }
407
-
408
-        $classes = array_unique($classes);
409
-
410
-        return $classes;
411
-    }
412
-
413
-    /**
414
-     * Writes the PHP bean file with all getters and setters from the table passed in parameter.
415
-     *
416
-     * @param string $beannamespace The namespace of the bean
417
-     */
418
-    public function generatePhpCode($beannamespace)
419
-    {
420
-        $tableName = $this->table->getName();
421
-        $baseClassName = TDBMDaoGenerator::getBaseBeanNameFromTableName($tableName);
422
-        $className = TDBMDaoGenerator::getBeanNameFromTableName($tableName);
423
-        $parentFk = $this->schemaAnalyzer->getParentRelationship($tableName);
424
-
425
-        $classes = $this->generateExtendsAndUseStatements($parentFk);
426
-
427
-        $uses = array_map(function ($className) use ($beannamespace) {
428
-            return 'use '.$beannamespace.'\\'.$className.";\n";
429
-        }, $classes);
430
-        $use = implode('', $uses);
431
-
432
-        if ($parentFk !== null) {
433
-            $extends = TDBMDaoGenerator::getBeanNameFromTableName($parentFk->getForeignTableName());
434
-        } else {
435
-            $extends = 'AbstractTDBMObject';
436
-            $use .= "use Mouf\\Database\\TDBM\\AbstractTDBMObject;\n";
437
-        }
438
-
439
-        $str = "<?php
370
+		$propertiesCode = '';
371
+		foreach ($this->beanPropertyDescriptors as $beanPropertyDescriptor) {
372
+			$propertiesCode .= $beanPropertyDescriptor->getJsonSerializeCode();
373
+		}
374
+
375
+		// Many2many relationships
376
+		$methodsCode = '';
377
+		foreach ($this->getMethodDescriptors() as $methodDescriptor) {
378
+			$methodsCode .= $methodDescriptor->getJsonSerializeCode();
379
+		}
380
+
381
+		return sprintf($str, $initializer, $propertiesCode, $methodsCode);
382
+	}
383
+
384
+	/**
385
+	 * Returns as an array the class we need to extend from and the list of use statements.
386
+	 *
387
+	 * @return array
388
+	 */
389
+	private function generateExtendsAndUseStatements(ForeignKeyConstraint $parentFk = null)
390
+	{
391
+		$classes = [];
392
+		if ($parentFk !== null) {
393
+			$extends = TDBMDaoGenerator::getBeanNameFromTableName($parentFk->getForeignTableName());
394
+			$classes[] = $extends;
395
+		}
396
+
397
+		foreach ($this->getBeanPropertyDescriptors() as $beanPropertyDescriptor) {
398
+			$className = $beanPropertyDescriptor->getClassName();
399
+			if (null !== $className) {
400
+				$classes[] = $beanPropertyDescriptor->getClassName();
401
+			}
402
+		}
403
+
404
+		foreach ($this->getMethodDescriptors() as $descriptor) {
405
+			$classes = array_merge($classes, $descriptor->getUsedClasses());
406
+		}
407
+
408
+		$classes = array_unique($classes);
409
+
410
+		return $classes;
411
+	}
412
+
413
+	/**
414
+	 * Writes the PHP bean file with all getters and setters from the table passed in parameter.
415
+	 *
416
+	 * @param string $beannamespace The namespace of the bean
417
+	 */
418
+	public function generatePhpCode($beannamespace)
419
+	{
420
+		$tableName = $this->table->getName();
421
+		$baseClassName = TDBMDaoGenerator::getBaseBeanNameFromTableName($tableName);
422
+		$className = TDBMDaoGenerator::getBeanNameFromTableName($tableName);
423
+		$parentFk = $this->schemaAnalyzer->getParentRelationship($tableName);
424
+
425
+		$classes = $this->generateExtendsAndUseStatements($parentFk);
426
+
427
+		$uses = array_map(function ($className) use ($beannamespace) {
428
+			return 'use '.$beannamespace.'\\'.$className.";\n";
429
+		}, $classes);
430
+		$use = implode('', $uses);
431
+
432
+		if ($parentFk !== null) {
433
+			$extends = TDBMDaoGenerator::getBeanNameFromTableName($parentFk->getForeignTableName());
434
+		} else {
435
+			$extends = 'AbstractTDBMObject';
436
+			$use .= "use Mouf\\Database\\TDBM\\AbstractTDBMObject;\n";
437
+		}
438
+
439
+		$str = "<?php
440 440
 namespace {$beannamespace}\\Generated;
441 441
 
442 442
 use Mouf\\Database\\TDBM\\ResultIterator;
@@ -456,129 +456,129 @@  discard block
 block discarded – undo
456 456
 {
457 457
 ";
458 458
 
459
-        $str .= $this->generateBeanConstructor();
459
+		$str .= $this->generateBeanConstructor();
460 460
 
461
-        foreach ($this->getExposedProperties() as $property) {
462
-            $str .= $property->getGetterSetterCode();
463
-        }
461
+		foreach ($this->getExposedProperties() as $property) {
462
+			$str .= $property->getGetterSetterCode();
463
+		}
464 464
 
465
-        foreach ($this->getMethodDescriptors() as $methodDescriptor) {
466
-            $str .= $methodDescriptor->getCode();
467
-        }
468
-        $str .= $this->generateJsonSerialize();
465
+		foreach ($this->getMethodDescriptors() as $methodDescriptor) {
466
+			$str .= $methodDescriptor->getCode();
467
+		}
468
+		$str .= $this->generateJsonSerialize();
469 469
 
470
-        $str .= $this->generateGetUsedTablesCode();
470
+		$str .= $this->generateGetUsedTablesCode();
471 471
 
472
-        $str .= $this->generateOnDeleteCode();
472
+		$str .= $this->generateOnDeleteCode();
473 473
 
474
-        $str .= '}
474
+		$str .= '}
475 475
 ';
476 476
 
477
-        return $str;
478
-    }
479
-
480
-    /**
481
-     * @param string $beanNamespace
482
-     * @param string $beanClassName
483
-     *
484
-     * @return array first element: list of used beans, second item: PHP code as a string
485
-     */
486
-    public function generateFindByDaoCode($beanNamespace, $beanClassName)
487
-    {
488
-        $code = '';
489
-        $usedBeans = [];
490
-        foreach ($this->table->getIndexes() as $index) {
491
-            if (!$index->isPrimary()) {
492
-                list($usedBeansForIndex, $codeForIndex) = $this->generateFindByDaoCodeForIndex($index, $beanNamespace, $beanClassName);
493
-                $code .= $codeForIndex;
494
-                $usedBeans = array_merge($usedBeans, $usedBeansForIndex);
495
-            }
496
-        }
497
-
498
-        return [$usedBeans, $code];
499
-    }
500
-
501
-    /**
502
-     * @param Index  $index
503
-     * @param string $beanNamespace
504
-     * @param string $beanClassName
505
-     *
506
-     * @return array first element: list of used beans, second item: PHP code as a string
507
-     */
508
-    private function generateFindByDaoCodeForIndex(Index $index, $beanNamespace, $beanClassName)
509
-    {
510
-        $columns = $index->getColumns();
511
-        $usedBeans = [];
512
-
513
-        /*
477
+		return $str;
478
+	}
479
+
480
+	/**
481
+	 * @param string $beanNamespace
482
+	 * @param string $beanClassName
483
+	 *
484
+	 * @return array first element: list of used beans, second item: PHP code as a string
485
+	 */
486
+	public function generateFindByDaoCode($beanNamespace, $beanClassName)
487
+	{
488
+		$code = '';
489
+		$usedBeans = [];
490
+		foreach ($this->table->getIndexes() as $index) {
491
+			if (!$index->isPrimary()) {
492
+				list($usedBeansForIndex, $codeForIndex) = $this->generateFindByDaoCodeForIndex($index, $beanNamespace, $beanClassName);
493
+				$code .= $codeForIndex;
494
+				$usedBeans = array_merge($usedBeans, $usedBeansForIndex);
495
+			}
496
+		}
497
+
498
+		return [$usedBeans, $code];
499
+	}
500
+
501
+	/**
502
+	 * @param Index  $index
503
+	 * @param string $beanNamespace
504
+	 * @param string $beanClassName
505
+	 *
506
+	 * @return array first element: list of used beans, second item: PHP code as a string
507
+	 */
508
+	private function generateFindByDaoCodeForIndex(Index $index, $beanNamespace, $beanClassName)
509
+	{
510
+		$columns = $index->getColumns();
511
+		$usedBeans = [];
512
+
513
+		/*
514 514
          * The list of elements building this index (expressed as columns or foreign keys)
515 515
          * @var AbstractBeanPropertyDescriptor[]
516 516
          */
517
-        $elements = [];
518
-
519
-        foreach ($columns as $column) {
520
-            $fk = $this->isPartOfForeignKey($this->table, $this->table->getColumn($column));
521
-            if ($fk !== null) {
522
-                if (!in_array($fk, $elements)) {
523
-                    $elements[] = new ObjectBeanPropertyDescriptor($this->table, $fk, $this->schemaAnalyzer);
524
-                }
525
-            } else {
526
-                $elements[] = new ScalarBeanPropertyDescriptor($this->table, $this->table->getColumn($column));
527
-            }
528
-        }
529
-
530
-        // If the index is actually only a foreign key, let's bypass it entirely.
531
-        if (count($elements) === 1 && $elements[0] instanceof ObjectBeanPropertyDescriptor) {
532
-            return [[], ''];
533
-        }
534
-
535
-        $methodNameComponent = [];
536
-        $functionParameters = [];
537
-        $first = true;
538
-        foreach ($elements as $element) {
539
-            $methodNameComponent[] = $element->getUpperCamelCaseName();
540
-            $functionParameter = $element->getClassName();
541
-            if ($functionParameter) {
542
-                $usedBeans[] = $beanNamespace.'\\'.$functionParameter;
543
-                $functionParameter .= ' ';
544
-            }
545
-            $functionParameter .= $element->getVariableName();
546
-            if ($first) {
547
-                $first = false;
548
-            } else {
549
-                $functionParameter .= ' = null';
550
-            }
551
-            $functionParameters[] = $functionParameter;
552
-        }
553
-        if ($index->isUnique()) {
554
-            $methodName = 'findOneBy'.implode('And', $methodNameComponent);
555
-            $calledMethod = 'findOne';
556
-            $returnType = "{$beanClassName}";
557
-        } else {
558
-            $methodName = 'findBy'.implode('And', $methodNameComponent);
559
-            $returnType = "{$beanClassName}[]|ResultIterator|ResultArray";
560
-            $calledMethod = 'find';
561
-        }
562
-        $functionParametersString = implode(', ', $functionParameters);
563
-
564
-        $count = 0;
565
-
566
-        $params = [];
567
-        $filterArrayCode = '';
568
-        $commentArguments = [];
569
-        foreach ($elements as $element) {
570
-            $params[] = $element->getParamAnnotation();
571
-            if ($element instanceof ScalarBeanPropertyDescriptor) {
572
-                $filterArrayCode .= '            '.var_export($element->getColumnName(), true).' => '.$element->getVariableName().",\n";
573
-            } else {
574
-                ++$count;
575
-                $filterArrayCode .= '            '.$count.' => '.$element->getVariableName().",\n";
576
-            }
577
-            $commentArguments[] = substr($element->getVariableName(), 1);
578
-        }
579
-        $paramsString = implode("\n", $params);
580
-
581
-        $code = "
517
+		$elements = [];
518
+
519
+		foreach ($columns as $column) {
520
+			$fk = $this->isPartOfForeignKey($this->table, $this->table->getColumn($column));
521
+			if ($fk !== null) {
522
+				if (!in_array($fk, $elements)) {
523
+					$elements[] = new ObjectBeanPropertyDescriptor($this->table, $fk, $this->schemaAnalyzer);
524
+				}
525
+			} else {
526
+				$elements[] = new ScalarBeanPropertyDescriptor($this->table, $this->table->getColumn($column));
527
+			}
528
+		}
529
+
530
+		// If the index is actually only a foreign key, let's bypass it entirely.
531
+		if (count($elements) === 1 && $elements[0] instanceof ObjectBeanPropertyDescriptor) {
532
+			return [[], ''];
533
+		}
534
+
535
+		$methodNameComponent = [];
536
+		$functionParameters = [];
537
+		$first = true;
538
+		foreach ($elements as $element) {
539
+			$methodNameComponent[] = $element->getUpperCamelCaseName();
540
+			$functionParameter = $element->getClassName();
541
+			if ($functionParameter) {
542
+				$usedBeans[] = $beanNamespace.'\\'.$functionParameter;
543
+				$functionParameter .= ' ';
544
+			}
545
+			$functionParameter .= $element->getVariableName();
546
+			if ($first) {
547
+				$first = false;
548
+			} else {
549
+				$functionParameter .= ' = null';
550
+			}
551
+			$functionParameters[] = $functionParameter;
552
+		}
553
+		if ($index->isUnique()) {
554
+			$methodName = 'findOneBy'.implode('And', $methodNameComponent);
555
+			$calledMethod = 'findOne';
556
+			$returnType = "{$beanClassName}";
557
+		} else {
558
+			$methodName = 'findBy'.implode('And', $methodNameComponent);
559
+			$returnType = "{$beanClassName}[]|ResultIterator|ResultArray";
560
+			$calledMethod = 'find';
561
+		}
562
+		$functionParametersString = implode(', ', $functionParameters);
563
+
564
+		$count = 0;
565
+
566
+		$params = [];
567
+		$filterArrayCode = '';
568
+		$commentArguments = [];
569
+		foreach ($elements as $element) {
570
+			$params[] = $element->getParamAnnotation();
571
+			if ($element instanceof ScalarBeanPropertyDescriptor) {
572
+				$filterArrayCode .= '            '.var_export($element->getColumnName(), true).' => '.$element->getVariableName().",\n";
573
+			} else {
574
+				++$count;
575
+				$filterArrayCode .= '            '.$count.' => '.$element->getVariableName().",\n";
576
+			}
577
+			$commentArguments[] = substr($element->getVariableName(), 1);
578
+		}
579
+		$paramsString = implode("\n", $params);
580
+
581
+		$code = "
582 582
     /**
583 583
      * Get a list of $beanClassName filtered by ".implode(', ', $commentArguments).".
584 584
      *
@@ -596,27 +596,27 @@  discard block
 block discarded – undo
596 596
     }
597 597
 ";
598 598
 
599
-        return [$usedBeans, $code];
600
-    }
601
-
602
-    /**
603
-     * Generates the code for the getUsedTable protected method.
604
-     *
605
-     * @return string
606
-     */
607
-    private function generateGetUsedTablesCode()
608
-    {
609
-        $hasParentRelationship = $this->schemaAnalyzer->getParentRelationship($this->table->getName()) !== null;
610
-        if ($hasParentRelationship) {
611
-            $code = sprintf('        $tables = parent::getUsedTables();
599
+		return [$usedBeans, $code];
600
+	}
601
+
602
+	/**
603
+	 * Generates the code for the getUsedTable protected method.
604
+	 *
605
+	 * @return string
606
+	 */
607
+	private function generateGetUsedTablesCode()
608
+	{
609
+		$hasParentRelationship = $this->schemaAnalyzer->getParentRelationship($this->table->getName()) !== null;
610
+		if ($hasParentRelationship) {
611
+			$code = sprintf('        $tables = parent::getUsedTables();
612 612
         $tables[] = %s;
613 613
         
614 614
         return $tables;', var_export($this->table->getName(), true));
615
-        } else {
616
-            $code = sprintf('        return [ %s ];', var_export($this->table->getName(), true));
617
-        }
615
+		} else {
616
+			$code = sprintf('        return [ %s ];', var_export($this->table->getName(), true));
617
+		}
618 618
 
619
-        return sprintf('
619
+		return sprintf('
620 620
     /**
621 621
      * Returns an array of used tables by this bean (from parent to child relationship).
622 622
      *
@@ -627,20 +627,20 @@  discard block
 block discarded – undo
627 627
 %s    
628 628
     }
629 629
 ', $code);
630
-    }
631
-
632
-    private function generateOnDeleteCode()
633
-    {
634
-        $code = '';
635
-        $relationships = $this->getPropertiesForTable($this->table);
636
-        foreach ($relationships as $relationship) {
637
-            if ($relationship instanceof ObjectBeanPropertyDescriptor) {
638
-                $code .= sprintf('        $this->setRef('.var_export($relationship->getForeignKey()->getName(), true).', null, '.var_export($this->table->getName(), true).");\n");
639
-            }
640
-        }
641
-
642
-        if ($code) {
643
-            return sprintf('
630
+	}
631
+
632
+	private function generateOnDeleteCode()
633
+	{
634
+		$code = '';
635
+		$relationships = $this->getPropertiesForTable($this->table);
636
+		foreach ($relationships as $relationship) {
637
+			if ($relationship instanceof ObjectBeanPropertyDescriptor) {
638
+				$code .= sprintf('        $this->setRef('.var_export($relationship->getForeignKey()->getName(), true).', null, '.var_export($this->table->getName(), true).");\n");
639
+			}
640
+		}
641
+
642
+		if ($code) {
643
+			return sprintf('
644 644
     /**
645 645
      * Method called when the bean is removed from database.
646 646
      *
@@ -651,8 +651,8 @@  discard block
 block discarded – undo
651 651
 %s
652 652
     }
653 653
 ', $code);
654
-        }
654
+		}
655 655
 
656
-        return '';
657
-    }
656
+		return '';
657
+	}
658 658
 }
Please login to merge, or discard this patch.
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -92,7 +92,7 @@  discard block
 block discarded – undo
92 92
      */
93 93
     public function getConstructorProperties()
94 94
     {
95
-        $constructorProperties = array_filter($this->beanPropertyDescriptors, function (AbstractBeanPropertyDescriptor $property) {
95
+        $constructorProperties = array_filter($this->beanPropertyDescriptors, function(AbstractBeanPropertyDescriptor $property) {
96 96
             return $property->isCompulsory();
97 97
         });
98 98
 
@@ -107,7 +107,7 @@  discard block
 block discarded – undo
107 107
     public function getPropertiesWithDefault()
108 108
     {
109 109
         $properties = $this->getPropertiesForTable($this->table);
110
-        $defaultProperties = array_filter($properties, function (AbstractBeanPropertyDescriptor $property) {
110
+        $defaultProperties = array_filter($properties, function(AbstractBeanPropertyDescriptor $property) {
111 111
             return $property->hasDefault();
112 112
         });
113 113
 
@@ -121,7 +121,7 @@  discard block
 block discarded – undo
121 121
      */
122 122
     public function getExposedProperties()
123 123
     {
124
-        $exposedProperties = array_filter($this->beanPropertyDescriptors, function (AbstractBeanPropertyDescriptor $property) {
124
+        $exposedProperties = array_filter($this->beanPropertyDescriptors, function(AbstractBeanPropertyDescriptor $property) {
125 125
             return $property->getTable()->getName() == $this->table->getName();
126 126
         });
127 127
 
@@ -331,7 +331,7 @@  discard block
 block discarded – undo
331 331
         }
332 332
 
333 333
         foreach ($descriptorsByMethodName as $descriptorsForMethodName) {
334
-            if (count($descriptorsForMethodName) > 1) {
334
+            if (count($descriptorsForMethodName)>1) {
335 335
                 foreach ($descriptorsForMethodName as $descriptor) {
336 336
                     $descriptor->useAlternativeName();
337 337
                 }
@@ -424,7 +424,7 @@  discard block
 block discarded – undo
424 424
 
425 425
         $classes = $this->generateExtendsAndUseStatements($parentFk);
426 426
 
427
-        $uses = array_map(function ($className) use ($beannamespace) {
427
+        $uses = array_map(function($className) use ($beannamespace) {
428 428
             return 'use '.$beannamespace.'\\'.$className.";\n";
429 429
         }, $classes);
430 430
         $use = implode('', $uses);
Please login to merge, or discard this patch.
src/Mouf/Database/TDBM/Utils/MethodDescriptorInterface.php 1 patch
Indentation   +28 added lines, -28 removed lines patch added patch discarded remove patch
@@ -4,36 +4,36 @@
 block discarded – undo
4 4
 
5 5
 interface MethodDescriptorInterface
6 6
 {
7
-    /**
8
-     * Returns the name of the method to be generated.
9
-     *
10
-     * @return string
11
-     */
12
-    public function getName() : string;
7
+	/**
8
+	 * Returns the name of the method to be generated.
9
+	 *
10
+	 * @return string
11
+	 */
12
+	public function getName() : string;
13 13
 
14
-    /**
15
-     * Requests the use of an alternative name for this method.
16
-     */
17
-    public function useAlternativeName();
14
+	/**
15
+	 * Requests the use of an alternative name for this method.
16
+	 */
17
+	public function useAlternativeName();
18 18
 
19
-    /**
20
-     * Returns the code of the method.
21
-     *
22
-     * @return string
23
-     */
24
-    public function getCode() : string;
19
+	/**
20
+	 * Returns the code of the method.
21
+	 *
22
+	 * @return string
23
+	 */
24
+	public function getCode() : string;
25 25
 
26
-    /**
27
-     * Returns an array of classes that needs a "use" for this method.
28
-     *
29
-     * @return string[]
30
-     */
31
-    public function getUsedClasses() : array;
26
+	/**
27
+	 * Returns an array of classes that needs a "use" for this method.
28
+	 *
29
+	 * @return string[]
30
+	 */
31
+	public function getUsedClasses() : array;
32 32
 
33
-    /**
34
-     * Returns the code to past in jsonSerialize.
35
-     *
36
-     * @return string
37
-     */
38
-    public function getJsonSerializeCode() : string;
33
+	/**
34
+	 * Returns the code to past in jsonSerialize.
35
+	 *
36
+	 * @return string
37
+	 */
38
+	public function getJsonSerializeCode() : string;
39 39
 }
Please login to merge, or discard this patch.
src/Mouf/Database/TDBM/Utils/PivotTableMethodsDescriptor.php 1 patch
Indentation   +130 added lines, -130 removed lines patch added patch discarded remove patch
@@ -7,99 +7,99 @@  discard block
 block discarded – undo
7 7
 
8 8
 class PivotTableMethodsDescriptor implements MethodDescriptorInterface
9 9
 {
10
-    /**
11
-     * @var Table
12
-     */
13
-    private $pivotTable;
14
-
15
-    private $useAlternateName = false;
16
-
17
-    /**
18
-     * @var ForeignKeyConstraint
19
-     */
20
-    private $localFk;
21
-
22
-    /**
23
-     * @var ForeignKeyConstraint
24
-     */
25
-    private $remoteFk;
26
-
27
-    /**
28
-     * @param Table $pivotTable The pivot table
29
-     * @param ForeignKeyConstraint $localFk
30
-     * @param ForeignKeyConstraint $remoteFk
31
-     */
32
-    public function __construct(Table $pivotTable, ForeignKeyConstraint $localFk, ForeignKeyConstraint $remoteFk)
33
-    {
34
-        $this->pivotTable = $pivotTable;
35
-        $this->localFk = $localFk;
36
-        $this->remoteFk = $remoteFk;
37
-    }
38
-
39
-    /**
40
-     * Requests the use of an alternative name for this method.
41
-     */
42
-    public function useAlternativeName()
43
-    {
44
-        $this->useAlternateName = true;
45
-    }
46
-
47
-    /**
48
-     * Returns the name of the method to be generated.
49
-     *
50
-     * @return string
51
-     */
52
-    public function getName() : string
53
-    {
54
-        if (!$this->useAlternateName) {
55
-            return 'get'.TDBMDaoGenerator::toCamelCase($this->remoteFk->getForeignTableName());
56
-        } else {
57
-            return 'get'.TDBMDaoGenerator::toCamelCase($this->remoteFk->getForeignTableName()).'By'.TDBMDaoGenerator::toCamelCase($this->pivotTable->getName());
58
-        }
59
-    }
60
-
61
-    /**
62
-     * Returns the plural name.
63
-     *
64
-     * @return string
65
-     */
66
-    private function getPluralName() : string
67
-    {
68
-        if (!$this->useAlternateName) {
69
-            return TDBMDaoGenerator::toCamelCase($this->remoteFk->getForeignTableName());
70
-        } else {
71
-            return TDBMDaoGenerator::toCamelCase($this->remoteFk->getForeignTableName()).'By'.TDBMDaoGenerator::toCamelCase($this->pivotTable->getName());
72
-        }
73
-    }
74
-
75
-    /**
76
-     * Returns the singular name.
77
-     *
78
-     * @return string
79
-     */
80
-    private function getSingularName() : string
81
-    {
82
-        if (!$this->useAlternateName) {
83
-            return TDBMDaoGenerator::toCamelCase(TDBMDaoGenerator::toSingular($this->remoteFk->getForeignTableName()));
84
-        } else {
85
-            return TDBMDaoGenerator::toCamelCase(TDBMDaoGenerator::toSingular($this->remoteFk->getForeignTableName())).'By'.TDBMDaoGenerator::toCamelCase($this->pivotTable->getName());
86
-        }
87
-    }
88
-
89
-    /**
90
-     * Returns the code of the method.
91
-     *
92
-     * @return string
93
-     */
94
-    public function getCode() : string
95
-    {
96
-        $singularName = $this->getSingularName();
97
-        $pluralName = $this->getPluralName();
98
-        $remoteBeanName = TDBMDaoGenerator::getBeanNameFromTableName($this->remoteFk->getForeignTableName());
99
-        $variableName = '$'.TDBMDaoGenerator::toVariableName($remoteBeanName);
100
-        $pluralVariableName = $variableName.'s';
101
-
102
-        $str = '    /**
10
+	/**
11
+	 * @var Table
12
+	 */
13
+	private $pivotTable;
14
+
15
+	private $useAlternateName = false;
16
+
17
+	/**
18
+	 * @var ForeignKeyConstraint
19
+	 */
20
+	private $localFk;
21
+
22
+	/**
23
+	 * @var ForeignKeyConstraint
24
+	 */
25
+	private $remoteFk;
26
+
27
+	/**
28
+	 * @param Table $pivotTable The pivot table
29
+	 * @param ForeignKeyConstraint $localFk
30
+	 * @param ForeignKeyConstraint $remoteFk
31
+	 */
32
+	public function __construct(Table $pivotTable, ForeignKeyConstraint $localFk, ForeignKeyConstraint $remoteFk)
33
+	{
34
+		$this->pivotTable = $pivotTable;
35
+		$this->localFk = $localFk;
36
+		$this->remoteFk = $remoteFk;
37
+	}
38
+
39
+	/**
40
+	 * Requests the use of an alternative name for this method.
41
+	 */
42
+	public function useAlternativeName()
43
+	{
44
+		$this->useAlternateName = true;
45
+	}
46
+
47
+	/**
48
+	 * Returns the name of the method to be generated.
49
+	 *
50
+	 * @return string
51
+	 */
52
+	public function getName() : string
53
+	{
54
+		if (!$this->useAlternateName) {
55
+			return 'get'.TDBMDaoGenerator::toCamelCase($this->remoteFk->getForeignTableName());
56
+		} else {
57
+			return 'get'.TDBMDaoGenerator::toCamelCase($this->remoteFk->getForeignTableName()).'By'.TDBMDaoGenerator::toCamelCase($this->pivotTable->getName());
58
+		}
59
+	}
60
+
61
+	/**
62
+	 * Returns the plural name.
63
+	 *
64
+	 * @return string
65
+	 */
66
+	private function getPluralName() : string
67
+	{
68
+		if (!$this->useAlternateName) {
69
+			return TDBMDaoGenerator::toCamelCase($this->remoteFk->getForeignTableName());
70
+		} else {
71
+			return TDBMDaoGenerator::toCamelCase($this->remoteFk->getForeignTableName()).'By'.TDBMDaoGenerator::toCamelCase($this->pivotTable->getName());
72
+		}
73
+	}
74
+
75
+	/**
76
+	 * Returns the singular name.
77
+	 *
78
+	 * @return string
79
+	 */
80
+	private function getSingularName() : string
81
+	{
82
+		if (!$this->useAlternateName) {
83
+			return TDBMDaoGenerator::toCamelCase(TDBMDaoGenerator::toSingular($this->remoteFk->getForeignTableName()));
84
+		} else {
85
+			return TDBMDaoGenerator::toCamelCase(TDBMDaoGenerator::toSingular($this->remoteFk->getForeignTableName())).'By'.TDBMDaoGenerator::toCamelCase($this->pivotTable->getName());
86
+		}
87
+	}
88
+
89
+	/**
90
+	 * Returns the code of the method.
91
+	 *
92
+	 * @return string
93
+	 */
94
+	public function getCode() : string
95
+	{
96
+		$singularName = $this->getSingularName();
97
+		$pluralName = $this->getPluralName();
98
+		$remoteBeanName = TDBMDaoGenerator::getBeanNameFromTableName($this->remoteFk->getForeignTableName());
99
+		$variableName = '$'.TDBMDaoGenerator::toVariableName($remoteBeanName);
100
+		$pluralVariableName = $variableName.'s';
101
+
102
+		$str = '    /**
103 103
      * Returns the list of %s associated to this bean via the %s pivot table.
104 104
      *
105 105
      * @return %s[]
@@ -110,9 +110,9 @@  discard block
 block discarded – undo
110 110
     }
111 111
 ';
112 112
 
113
-        $getterCode = sprintf($str, $remoteBeanName, $this->pivotTable->getName(), $remoteBeanName, $pluralName, var_export($this->remoteFk->getLocalTableName(), true));
113
+		$getterCode = sprintf($str, $remoteBeanName, $this->pivotTable->getName(), $remoteBeanName, $pluralName, var_export($this->remoteFk->getLocalTableName(), true));
114 114
 
115
-        $str = '    /**
115
+		$str = '    /**
116 116
      * Adds a relationship with %s associated to this bean via the %s pivot table.
117 117
      *
118 118
      * @param %s %s
@@ -123,9 +123,9 @@  discard block
 block discarded – undo
123 123
     }
124 124
 ';
125 125
 
126
-        $adderCode = sprintf($str, $remoteBeanName, $this->pivotTable->getName(), $remoteBeanName, $variableName, $singularName, $remoteBeanName, $variableName, var_export($this->remoteFk->getLocalTableName(), true), $variableName);
126
+		$adderCode = sprintf($str, $remoteBeanName, $this->pivotTable->getName(), $remoteBeanName, $variableName, $singularName, $remoteBeanName, $variableName, var_export($this->remoteFk->getLocalTableName(), true), $variableName);
127 127
 
128
-        $str = '    /**
128
+		$str = '    /**
129 129
      * Deletes the relationship with %s associated to this bean via the %s pivot table.
130 130
      *
131 131
      * @param %s %s
@@ -136,9 +136,9 @@  discard block
 block discarded – undo
136 136
     }
137 137
 ';
138 138
 
139
-        $removerCode = sprintf($str, $remoteBeanName, $this->pivotTable->getName(), $remoteBeanName, $variableName, $singularName, $remoteBeanName, $variableName, var_export($this->remoteFk->getLocalTableName(), true), $variableName);
139
+		$removerCode = sprintf($str, $remoteBeanName, $this->pivotTable->getName(), $remoteBeanName, $variableName, $singularName, $remoteBeanName, $variableName, var_export($this->remoteFk->getLocalTableName(), true), $variableName);
140 140
 
141
-        $str = '    /**
141
+		$str = '    /**
142 142
      * Returns whether this bean is associated with %s via the %s pivot table.
143 143
      *
144 144
      * @param %s %s
@@ -150,9 +150,9 @@  discard block
 block discarded – undo
150 150
     }
151 151
 ';
152 152
 
153
-        $hasCode = sprintf($str, $remoteBeanName, $this->pivotTable->getName(), $remoteBeanName, $variableName, $singularName, $remoteBeanName, $variableName, var_export($this->remoteFk->getLocalTableName(), true), $variableName);
153
+		$hasCode = sprintf($str, $remoteBeanName, $this->pivotTable->getName(), $remoteBeanName, $variableName, $singularName, $remoteBeanName, $variableName, var_export($this->remoteFk->getLocalTableName(), true), $variableName);
154 154
 
155
-        $str = '    /**
155
+		$str = '    /**
156 156
      * Sets all relationships with %s associated to this bean via the %s pivot table.
157 157
      * Exiting relationships will be removed and replaced by the provided relationships.
158 158
      *
@@ -164,38 +164,38 @@  discard block
 block discarded – undo
164 164
     }
165 165
 ';
166 166
 
167
-        $setterCode = sprintf($str, $remoteBeanName, $this->pivotTable->getName(), $remoteBeanName, $pluralVariableName, $pluralName, $pluralVariableName, var_export($this->remoteFk->getLocalTableName(), true), $pluralVariableName);
168
-
169
-        $code = $getterCode.$adderCode.$removerCode.$hasCode.$setterCode;
170
-
171
-        return $code;
172
-    }
173
-
174
-    /**
175
-     * Returns an array of classes that needs a "use" for this method.
176
-     *
177
-     * @return string[]
178
-     */
179
-    public function getUsedClasses() : array
180
-    {
181
-        return [TDBMDaoGenerator::getBeanNameFromTableName($this->remoteFk->getForeignTableName())];
182
-    }
183
-
184
-    /**
185
-     * Returns the code to past in jsonSerialize.
186
-     *
187
-     * @return string
188
-     */
189
-    public function getJsonSerializeCode() : string
190
-    {
191
-        $remoteBeanName = TDBMDaoGenerator::getBeanNameFromTableName($this->remoteFk->getForeignTableName());
192
-        $variableName = '$'.TDBMDaoGenerator::toVariableName($remoteBeanName);
193
-
194
-        return '        if (!$stopRecursion) {
167
+		$setterCode = sprintf($str, $remoteBeanName, $this->pivotTable->getName(), $remoteBeanName, $pluralVariableName, $pluralName, $pluralVariableName, var_export($this->remoteFk->getLocalTableName(), true), $pluralVariableName);
168
+
169
+		$code = $getterCode.$adderCode.$removerCode.$hasCode.$setterCode;
170
+
171
+		return $code;
172
+	}
173
+
174
+	/**
175
+	 * Returns an array of classes that needs a "use" for this method.
176
+	 *
177
+	 * @return string[]
178
+	 */
179
+	public function getUsedClasses() : array
180
+	{
181
+		return [TDBMDaoGenerator::getBeanNameFromTableName($this->remoteFk->getForeignTableName())];
182
+	}
183
+
184
+	/**
185
+	 * Returns the code to past in jsonSerialize.
186
+	 *
187
+	 * @return string
188
+	 */
189
+	public function getJsonSerializeCode() : string
190
+	{
191
+		$remoteBeanName = TDBMDaoGenerator::getBeanNameFromTableName($this->remoteFk->getForeignTableName());
192
+		$variableName = '$'.TDBMDaoGenerator::toVariableName($remoteBeanName);
193
+
194
+		return '        if (!$stopRecursion) {
195 195
             $array[\''.lcfirst($this->getPluralName()).'\'] = array_map(function ('.$remoteBeanName.' '.$variableName.') {
196 196
                 return '.$variableName.'->jsonSerialize(true);
197 197
             }, $this->'.$this->getName().'());
198 198
         }
199 199
 ';
200
-    }
200
+	}
201 201
 }
Please login to merge, or discard this patch.