Completed
Pull Request — 3.4 (#46)
by David
18:51
created
src/Mouf/Database/TDBM/Utils/ObjectBeanPropertyDescriptor.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -62,7 +62,7 @@  discard block
 block discarded – undo
62 62
     public function getUpperCamelCaseName() {
63 63
         // First, are there many column or only one?
64 64
         // If one column, we name the setter after it. Otherwise, we name the setter after the table name
65
-        if (count($this->foreignKey->getLocalColumns()) > 1) {
65
+        if (count($this->foreignKey->getLocalColumns())>1) {
66 66
             $name = TDBMDaoGenerator::toSingular(TDBMDaoGenerator::toCamelCase($this->foreignKey->getForeignTableName()));
67 67
             if ($this->alternativeName) {
68 68
                 $camelizedColumns = array_map(['Mouf\\Database\\TDBM\\Utils\\TDBMDaoGenerator', 'toCamelCase'], $this->foreignKey->getLocalColumns());
@@ -144,7 +144,7 @@  discard block
 block discarded – undo
144 144
      * @param '.$referencedBeanName.' $object
145 145
      */
146 146
     public function '.$setterName.'('.$referencedBeanName.' $object = null) {
147
-        $this->setRef(' . var_export($this->foreignKey->getName(), true) . ', $object, '.var_export($tableName, true).');
147
+        $this->setRef(' . var_export($this->foreignKey->getName(), true).', $object, '.var_export($tableName, true).');
148 148
     }
149 149
 
150 150
 ';
Please login to merge, or discard this patch.
Indentation   +128 added lines, -128 removed lines patch added patch discarded remove patch
@@ -14,122 +14,122 @@  discard block
 block discarded – undo
14 14
 class ObjectBeanPropertyDescriptor extends AbstractBeanPropertyDescriptor
15 15
 {
16 16
 
17
-    /**
18
-     * @var ForeignKeyConstraint
19
-     */
20
-    private $foreignKey;
21
-
22
-    /**
23
-     * @var SchemaAnalyzer
24
-     */
25
-    private $schemaAnalyzer;
26
-
27
-    public function __construct(Table $table, ForeignKeyConstraint $foreignKey, SchemaAnalyzer $schemaAnalyzer) {
28
-        parent::__construct($table);
29
-        $this->foreignKey = $foreignKey;
30
-        $this->schemaAnalyzer = $schemaAnalyzer;
31
-    }
32
-
33
-
34
-
35
-    /**
36
-     * Returns the foreignkey the column is part of, if any. null otherwise.
37
-     *
38
-     * @return ForeignKeyConstraint|null
39
-     */
40
-    public function getForeignKey() {
41
-        return $this->foreignKey;
42
-    }
43
-
44
-    /**
45
-     * Returns the name of the class linked to this property or null if this is not a foreign key
46
-     * @return null|string
47
-     */
48
-    public function getClassName() {
49
-        return TDBMDaoGenerator::getBeanNameFromTableName($this->foreignKey->getForeignTableName());
50
-    }
51
-
52
-    /**
53
-     * Returns the param annotation for this property (useful for constructor).
54
-     *
55
-     * @return string
56
-     */
57
-    public function getParamAnnotation() {
58
-        $str = "     * @param %s %s";
59
-        return sprintf($str, $this->getClassName(), $this->getVariableName());
60
-    }
61
-
62
-    public function getUpperCamelCaseName() {
63
-        // First, are there many column or only one?
64
-        // If one column, we name the setter after it. Otherwise, we name the setter after the table name
65
-        if (count($this->foreignKey->getLocalColumns()) > 1) {
66
-            $name = TDBMDaoGenerator::toSingular(TDBMDaoGenerator::toCamelCase($this->foreignKey->getForeignTableName()));
67
-            if ($this->alternativeName) {
68
-                $camelizedColumns = array_map(['Mouf\\Database\\TDBM\\Utils\\TDBMDaoGenerator', 'toCamelCase'], $this->foreignKey->getLocalColumns());
69
-
70
-                $name .= 'By'.implode('And', $camelizedColumns);
71
-            }
72
-        } else {
73
-            $column = $this->foreignKey->getLocalColumns()[0];
74
-            // Let's remove any _id or id_.
75
-            if (strpos(strtolower($column), "id_") === 0) {
76
-                $column = substr($column, 3);
77
-            }
78
-            if (strrpos(strtolower($column), "_id") === strlen($column)-3) {
79
-                $column = substr($column, 0, strlen($column)-3);
80
-            }
81
-            $name = TDBMDaoGenerator::toCamelCase($column);
82
-            if ($this->alternativeName) {
83
-                $name .= 'Object';
84
-            }
85
-        }
86
-        return $name;
87
-    }
88
-
89
-    /**
90
-     * Returns true if the property is compulsory (and therefore should be fetched in the constructor).
91
-     * @return bool
92
-     */
93
-    public function isCompulsory() {
94
-        // Are all columns nullable?
95
-        $localColumnNames = $this->foreignKey->getLocalColumns();
96
-
97
-        foreach ($localColumnNames as $name) {
98
-            $column = $this->table->getColumn($name);
99
-            if ($column->getNotnull()) {
100
-                return true;
101
-            }
102
-        }
103
-
104
-        return false;
105
-    }
106
-
107
-    /**
108
-     * Returns true if the property is the primary key
109
-     * @return bool
110
-     */
111
-    public function isPrimaryKey() {
112
-        $fkColumns = $this->foreignKey->getLocalColumns();
113
-        sort($fkColumns);
114
-
115
-        $pkColumns = $this->table->getPrimaryKeyColumns();
116
-        sort($pkColumns);
117
-
118
-        return $fkColumns == $pkColumns;
119
-    }
120
-
121
-    /**
122
-     * Returns the PHP code for getters and setters
123
-     * @return string
124
-     */
125
-    public function getGetterSetterCode() {
126
-        $tableName = $this->table->getName();
127
-        $getterName = $this->getGetterName();
128
-        $setterName = $this->getSetterName();
129
-
130
-        $referencedBeanName = TDBMDaoGenerator::getBeanNameFromTableName($this->foreignKey->getForeignTableName());
131
-
132
-        $str = '    /**
17
+	/**
18
+	 * @var ForeignKeyConstraint
19
+	 */
20
+	private $foreignKey;
21
+
22
+	/**
23
+	 * @var SchemaAnalyzer
24
+	 */
25
+	private $schemaAnalyzer;
26
+
27
+	public function __construct(Table $table, ForeignKeyConstraint $foreignKey, SchemaAnalyzer $schemaAnalyzer) {
28
+		parent::__construct($table);
29
+		$this->foreignKey = $foreignKey;
30
+		$this->schemaAnalyzer = $schemaAnalyzer;
31
+	}
32
+
33
+
34
+
35
+	/**
36
+	 * Returns the foreignkey the column is part of, if any. null otherwise.
37
+	 *
38
+	 * @return ForeignKeyConstraint|null
39
+	 */
40
+	public function getForeignKey() {
41
+		return $this->foreignKey;
42
+	}
43
+
44
+	/**
45
+	 * Returns the name of the class linked to this property or null if this is not a foreign key
46
+	 * @return null|string
47
+	 */
48
+	public function getClassName() {
49
+		return TDBMDaoGenerator::getBeanNameFromTableName($this->foreignKey->getForeignTableName());
50
+	}
51
+
52
+	/**
53
+	 * Returns the param annotation for this property (useful for constructor).
54
+	 *
55
+	 * @return string
56
+	 */
57
+	public function getParamAnnotation() {
58
+		$str = "     * @param %s %s";
59
+		return sprintf($str, $this->getClassName(), $this->getVariableName());
60
+	}
61
+
62
+	public function getUpperCamelCaseName() {
63
+		// First, are there many column or only one?
64
+		// If one column, we name the setter after it. Otherwise, we name the setter after the table name
65
+		if (count($this->foreignKey->getLocalColumns()) > 1) {
66
+			$name = TDBMDaoGenerator::toSingular(TDBMDaoGenerator::toCamelCase($this->foreignKey->getForeignTableName()));
67
+			if ($this->alternativeName) {
68
+				$camelizedColumns = array_map(['Mouf\\Database\\TDBM\\Utils\\TDBMDaoGenerator', 'toCamelCase'], $this->foreignKey->getLocalColumns());
69
+
70
+				$name .= 'By'.implode('And', $camelizedColumns);
71
+			}
72
+		} else {
73
+			$column = $this->foreignKey->getLocalColumns()[0];
74
+			// Let's remove any _id or id_.
75
+			if (strpos(strtolower($column), "id_") === 0) {
76
+				$column = substr($column, 3);
77
+			}
78
+			if (strrpos(strtolower($column), "_id") === strlen($column)-3) {
79
+				$column = substr($column, 0, strlen($column)-3);
80
+			}
81
+			$name = TDBMDaoGenerator::toCamelCase($column);
82
+			if ($this->alternativeName) {
83
+				$name .= 'Object';
84
+			}
85
+		}
86
+		return $name;
87
+	}
88
+
89
+	/**
90
+	 * Returns true if the property is compulsory (and therefore should be fetched in the constructor).
91
+	 * @return bool
92
+	 */
93
+	public function isCompulsory() {
94
+		// Are all columns nullable?
95
+		$localColumnNames = $this->foreignKey->getLocalColumns();
96
+
97
+		foreach ($localColumnNames as $name) {
98
+			$column = $this->table->getColumn($name);
99
+			if ($column->getNotnull()) {
100
+				return true;
101
+			}
102
+		}
103
+
104
+		return false;
105
+	}
106
+
107
+	/**
108
+	 * Returns true if the property is the primary key
109
+	 * @return bool
110
+	 */
111
+	public function isPrimaryKey() {
112
+		$fkColumns = $this->foreignKey->getLocalColumns();
113
+		sort($fkColumns);
114
+
115
+		$pkColumns = $this->table->getPrimaryKeyColumns();
116
+		sort($pkColumns);
117
+
118
+		return $fkColumns == $pkColumns;
119
+	}
120
+
121
+	/**
122
+	 * Returns the PHP code for getters and setters
123
+	 * @return string
124
+	 */
125
+	public function getGetterSetterCode() {
126
+		$tableName = $this->table->getName();
127
+		$getterName = $this->getGetterName();
128
+		$setterName = $this->getSetterName();
129
+
130
+		$referencedBeanName = TDBMDaoGenerator::getBeanNameFromTableName($this->foreignKey->getForeignTableName());
131
+
132
+		$str = '    /**
133 133
      * Returns the '.$referencedBeanName.' object bound to this object via the '.implode(" and ", $this->foreignKey->getLocalColumns()).' column.
134 134
      *
135 135
      * @return '.$referencedBeanName.'
@@ -148,19 +148,19 @@  discard block
 block discarded – undo
148 148
     }
149 149
 
150 150
 ';
151
-        return $str;
152
-    }
153
-
154
-    /**
155
-     * Returns the part of code useful when doing json serialization.
156
-     *
157
-     * @return string
158
-     */
159
-    public function getJsonSerializeCode()
160
-    {
161
-        return '        if (!$stopRecursion) {
151
+		return $str;
152
+	}
153
+
154
+	/**
155
+	 * Returns the part of code useful when doing json serialization.
156
+	 *
157
+	 * @return string
158
+	 */
159
+	public function getJsonSerializeCode()
160
+	{
161
+		return '        if (!$stopRecursion) {
162 162
             $array['.var_export($this->getLowerCamelCaseName(), true).'] = $this->'.$this->getGetterName().'()->jsonSerialize(true);
163 163
         }
164 164
 ';
165
-    }
165
+	}
166 166
 }
Please login to merge, or discard this patch.
src/Mouf/Database/TDBM/Utils/BeanDescriptor.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -288,7 +288,7 @@  discard block
 block discarded – undo
288 288
         $fksByMethodName = [];
289 289
 
290 290
         foreach ($fksByTable as $tableName => $fksForTable) {
291
-            if (count($fksForTable) > 1) {
291
+            if (count($fksForTable)>1) {
292 292
                 foreach ($fksForTable as $fk) {
293 293
                     $methodName = 'get'.TDBMDaoGenerator::toCamelCase($fk->getLocalTableName()).'By';
294 294
 
@@ -388,7 +388,7 @@  discard block
 block discarded – undo
388 388
 
389 389
         $finalDescs = [];
390 390
         foreach ($descs as $descArray) {
391
-            if (count($descArray) > 1) {
391
+            if (count($descArray)>1) {
392 392
                 foreach ($descArray as $desc) {
393 393
                     $desc['name'] = TDBMDaoGenerator::toCamelCase($desc['remoteFK']->getForeignTableName())."By".TDBMDaoGenerator::toCamelCase($desc['table']->getName());
394 394
                     $finalDescs[] = $desc;
Please login to merge, or discard this patch.
Indentation   +441 added lines, -441 removed lines patch added patch discarded remove patch
@@ -15,232 +15,232 @@  discard block
 block discarded – undo
15 15
  */
16 16
 class BeanDescriptor
17 17
 {
18
-    /**
19
-     * @var Table
20
-     */
21
-    private $table;
22
-
23
-    /**
24
-     * @var SchemaAnalyzer
25
-     */
26
-    private $schemaAnalyzer;
27
-
28
-    /**
29
-     * @var Schema
30
-     */
31
-    private $schema;
32
-
33
-    /**
34
-     * @var AbstractBeanPropertyDescriptor[]
35
-     */
36
-    private $beanPropertyDescriptors = [];
37
-
38
-    public function __construct(Table $table, SchemaAnalyzer $schemaAnalyzer, Schema $schema) {
39
-        $this->table = $table;
40
-        $this->schemaAnalyzer = $schemaAnalyzer;
41
-        $this->schema = $schema;
42
-        $this->initBeanPropertyDescriptors();
43
-    }
44
-
45
-    private function initBeanPropertyDescriptors() {
46
-        $this->beanPropertyDescriptors = $this->getProperties($this->table);
47
-    }
48
-
49
-    /**
50
-     * Returns the foreignkey the column is part of, if any. null otherwise.
51
-     *
52
-     * @param Table $table
53
-     * @param Column $column
54
-     * @return ForeignKeyConstraint|null
55
-     */
56
-    private function isPartOfForeignKey(Table $table, Column $column) {
57
-        $localColumnName = $column->getName();
58
-        foreach ($table->getForeignKeys() as $foreignKey) {
59
-            foreach ($foreignKey->getColumns() as $columnName) {
60
-                if ($columnName === $localColumnName) {
61
-                    return $foreignKey;
62
-                }
63
-            }
64
-        }
65
-        return null;
66
-    }
67
-
68
-    /**
69
-     * @return AbstractBeanPropertyDescriptor[]
70
-     */
71
-    public function getBeanPropertyDescriptors()
72
-    {
73
-        return $this->beanPropertyDescriptors;
74
-    }
75
-
76
-    /**
77
-     * Returns the list of columns that are not nullable and not autogenerated for a given table and its parent.
78
-     *
79
-     * @return AbstractBeanPropertyDescriptor[]
80
-     */
81
-    public function getConstructorProperties() {
82
-
83
-        $constructorProperties = array_filter($this->beanPropertyDescriptors, function(AbstractBeanPropertyDescriptor $property) {
84
-           return $property->isCompulsory();
85
-        });
86
-
87
-        return $constructorProperties;
88
-    }
89
-
90
-    /**
91
-     * Returns the list of properties exposed as getters and setters in this class.
92
-     *
93
-     * @return AbstractBeanPropertyDescriptor[]
94
-     */
95
-    public function getExposedProperties() {
96
-        $exposedProperties = array_filter($this->beanPropertyDescriptors, function(AbstractBeanPropertyDescriptor $property) {
97
-            return $property->getTable()->getName() == $this->table->getName();
98
-        });
99
-
100
-        return $exposedProperties;
101
-    }
102
-
103
-    /**
104
-     * Returns the list of foreign keys pointing to the table represented by this bean, excluding foreign keys
105
-     * from junction tables and from inheritance.
106
-     *
107
-     * @return ForeignKeyConstraint[]
108
-     */
109
-    public function getIncomingForeignKeys() {
110
-
111
-        $junctionTables = $this->schemaAnalyzer->detectJunctionTables();
112
-        $junctionTableNames = array_map(function(Table $table) { return $table->getName(); }, $junctionTables);
113
-        $childrenRelationships = $this->schemaAnalyzer->getChildrenRelationships($this->table->getName());
114
-
115
-        $fks = [];
116
-        foreach ($this->schema->getTables() as $table) {
117
-            foreach ($table->getForeignKeys() as $fk) {
118
-                if ($fk->getForeignTableName() === $this->table->getName()) {
119
-                    if (in_array($fk->getLocalTableName(), $junctionTableNames)) {
120
-                        continue;
121
-                    }
122
-                    foreach ($childrenRelationships as $childFk) {
123
-                        if ($fk->getLocalTableName() === $childFk->getLocalTableName() && $fk->getLocalColumns() === $childFk->getLocalColumns()) {
124
-                            continue 2;
125
-                        }
126
-                    }
127
-                    $fks[] = $fk;
128
-                }
129
-            }
130
-        }
131
-
132
-        return $fks;
133
-    }
134
-
135
-    /**
136
-     * Returns the list of properties for this table (including parent tables).
137
-     *
138
-     * @param Table $table
139
-     * @return AbstractBeanPropertyDescriptor[]
140
-     */
141
-    private function getProperties(Table $table)
142
-    {
143
-        $parentRelationship = $this->schemaAnalyzer->getParentRelationship($table->getName());
144
-        if ($parentRelationship) {
145
-            $parentTable = $this->schema->getTable($parentRelationship->getForeignTableName());
146
-            $properties = $this->getProperties($parentTable);
147
-            // we merge properties by overriding property names.
148
-            $localProperties = $this->getPropertiesForTable($table);
149
-            foreach ($localProperties as $name => $property) {
150
-                // We do not override properties if this is a primary key!
151
-                if ($property->isPrimaryKey()) {
152
-                    continue;
153
-                }
154
-                $properties[$name] = $property;
155
-            }
156
-            //$properties = array_merge($properties, $localProperties);
157
-
158
-        } else {
159
-            $properties = $this->getPropertiesForTable($table);
160
-        }
161
-
162
-        return $properties;
163
-    }
164
-
165
-        /**
166
-     * Returns the list of properties for this table (ignoring parent tables).
167
-     *
168
-     * @param Table $table
169
-     * @return AbstractBeanPropertyDescriptor[]
170
-     */
171
-    private function getPropertiesForTable(Table $table)
172
-    {
173
-        $parentRelationship = $this->schemaAnalyzer->getParentRelationship($table->getName());
174
-        if ($parentRelationship) {
175
-            $ignoreColumns = $parentRelationship->getLocalColumns();
176
-        } else {
177
-            $ignoreColumns = [];
178
-        }
179
-
180
-        $beanPropertyDescriptors = [];
181
-
182
-        foreach ($table->getColumns() as $column) {
183
-            if (array_search($column->getName(), $ignoreColumns) !== false) {
184
-                continue;
185
-            }
186
-
187
-            $fk = $this->isPartOfForeignKey($table, $column);
188
-            if ($fk !== null) {
189
-                // Check that previously added descriptors are not added on same FK (can happen with multi key FK).
190
-                foreach ($beanPropertyDescriptors as $beanDescriptor) {
191
-                    if ($beanDescriptor instanceof ObjectBeanPropertyDescriptor && $beanDescriptor->getForeignKey() === $fk) {
192
-                        continue 2;
193
-                    }
194
-                }
195
-                // Check that this property is not an inheritance relationship
196
-                $parentRelationship = $this->schemaAnalyzer->getParentRelationship($table->getName());
197
-                if ($parentRelationship === $fk) {
198
-                    continue;
199
-                }
200
-
201
-                $beanPropertyDescriptors[] = new ObjectBeanPropertyDescriptor($table, $fk, $this->schemaAnalyzer);
202
-            } else {
203
-                $beanPropertyDescriptors[] = new ScalarBeanPropertyDescriptor($table, $column);
204
-            }
205
-        }
206
-
207
-        // Now, let's get the name of all properties and let's check there is no duplicate.
208
-        /** @var $names AbstractBeanPropertyDescriptor[] */
209
-        $names = [];
210
-        foreach ($beanPropertyDescriptors as $beanDescriptor) {
211
-            $name = $beanDescriptor->getUpperCamelCaseName();
212
-            if (isset($names[$name])) {
213
-                $names[$name]->useAlternativeName();
214
-                $beanDescriptor->useAlternativeName();
215
-            } else {
216
-                $names[$name] = $beanDescriptor;
217
-            }
218
-        }
219
-
220
-        // Final check (throw exceptions if problem arises)
221
-        $names = [];
222
-        foreach ($beanPropertyDescriptors as $beanDescriptor) {
223
-            $name = $beanDescriptor->getUpperCamelCaseName();
224
-            if (isset($names[$name])) {
225
-                throw new TDBMException("Unsolvable name conflict while generating method name");
226
-            } else {
227
-                $names[$name] = $beanDescriptor;
228
-            }
229
-        }
230
-
231
-        // Last step, let's rebuild the list with a map:
232
-        $beanPropertyDescriptorsMap = [];
233
-        foreach ($beanPropertyDescriptors as $beanDescriptor) {
234
-            $beanPropertyDescriptorsMap[$beanDescriptor->getLowerCamelCaseName()] = $beanDescriptor;
235
-        }
236
-
237
-        return $beanPropertyDescriptorsMap;
238
-    }
239
-
240
-    public function generateBeanConstructor() {
241
-        $constructorProperties = $this->getConstructorProperties();
242
-
243
-        $constructorCode = "    /**
18
+	/**
19
+	 * @var Table
20
+	 */
21
+	private $table;
22
+
23
+	/**
24
+	 * @var SchemaAnalyzer
25
+	 */
26
+	private $schemaAnalyzer;
27
+
28
+	/**
29
+	 * @var Schema
30
+	 */
31
+	private $schema;
32
+
33
+	/**
34
+	 * @var AbstractBeanPropertyDescriptor[]
35
+	 */
36
+	private $beanPropertyDescriptors = [];
37
+
38
+	public function __construct(Table $table, SchemaAnalyzer $schemaAnalyzer, Schema $schema) {
39
+		$this->table = $table;
40
+		$this->schemaAnalyzer = $schemaAnalyzer;
41
+		$this->schema = $schema;
42
+		$this->initBeanPropertyDescriptors();
43
+	}
44
+
45
+	private function initBeanPropertyDescriptors() {
46
+		$this->beanPropertyDescriptors = $this->getProperties($this->table);
47
+	}
48
+
49
+	/**
50
+	 * Returns the foreignkey the column is part of, if any. null otherwise.
51
+	 *
52
+	 * @param Table $table
53
+	 * @param Column $column
54
+	 * @return ForeignKeyConstraint|null
55
+	 */
56
+	private function isPartOfForeignKey(Table $table, Column $column) {
57
+		$localColumnName = $column->getName();
58
+		foreach ($table->getForeignKeys() as $foreignKey) {
59
+			foreach ($foreignKey->getColumns() as $columnName) {
60
+				if ($columnName === $localColumnName) {
61
+					return $foreignKey;
62
+				}
63
+			}
64
+		}
65
+		return null;
66
+	}
67
+
68
+	/**
69
+	 * @return AbstractBeanPropertyDescriptor[]
70
+	 */
71
+	public function getBeanPropertyDescriptors()
72
+	{
73
+		return $this->beanPropertyDescriptors;
74
+	}
75
+
76
+	/**
77
+	 * Returns the list of columns that are not nullable and not autogenerated for a given table and its parent.
78
+	 *
79
+	 * @return AbstractBeanPropertyDescriptor[]
80
+	 */
81
+	public function getConstructorProperties() {
82
+
83
+		$constructorProperties = array_filter($this->beanPropertyDescriptors, function(AbstractBeanPropertyDescriptor $property) {
84
+		   return $property->isCompulsory();
85
+		});
86
+
87
+		return $constructorProperties;
88
+	}
89
+
90
+	/**
91
+	 * Returns the list of properties exposed as getters and setters in this class.
92
+	 *
93
+	 * @return AbstractBeanPropertyDescriptor[]
94
+	 */
95
+	public function getExposedProperties() {
96
+		$exposedProperties = array_filter($this->beanPropertyDescriptors, function(AbstractBeanPropertyDescriptor $property) {
97
+			return $property->getTable()->getName() == $this->table->getName();
98
+		});
99
+
100
+		return $exposedProperties;
101
+	}
102
+
103
+	/**
104
+	 * Returns the list of foreign keys pointing to the table represented by this bean, excluding foreign keys
105
+	 * from junction tables and from inheritance.
106
+	 *
107
+	 * @return ForeignKeyConstraint[]
108
+	 */
109
+	public function getIncomingForeignKeys() {
110
+
111
+		$junctionTables = $this->schemaAnalyzer->detectJunctionTables();
112
+		$junctionTableNames = array_map(function(Table $table) { return $table->getName(); }, $junctionTables);
113
+		$childrenRelationships = $this->schemaAnalyzer->getChildrenRelationships($this->table->getName());
114
+
115
+		$fks = [];
116
+		foreach ($this->schema->getTables() as $table) {
117
+			foreach ($table->getForeignKeys() as $fk) {
118
+				if ($fk->getForeignTableName() === $this->table->getName()) {
119
+					if (in_array($fk->getLocalTableName(), $junctionTableNames)) {
120
+						continue;
121
+					}
122
+					foreach ($childrenRelationships as $childFk) {
123
+						if ($fk->getLocalTableName() === $childFk->getLocalTableName() && $fk->getLocalColumns() === $childFk->getLocalColumns()) {
124
+							continue 2;
125
+						}
126
+					}
127
+					$fks[] = $fk;
128
+				}
129
+			}
130
+		}
131
+
132
+		return $fks;
133
+	}
134
+
135
+	/**
136
+	 * Returns the list of properties for this table (including parent tables).
137
+	 *
138
+	 * @param Table $table
139
+	 * @return AbstractBeanPropertyDescriptor[]
140
+	 */
141
+	private function getProperties(Table $table)
142
+	{
143
+		$parentRelationship = $this->schemaAnalyzer->getParentRelationship($table->getName());
144
+		if ($parentRelationship) {
145
+			$parentTable = $this->schema->getTable($parentRelationship->getForeignTableName());
146
+			$properties = $this->getProperties($parentTable);
147
+			// we merge properties by overriding property names.
148
+			$localProperties = $this->getPropertiesForTable($table);
149
+			foreach ($localProperties as $name => $property) {
150
+				// We do not override properties if this is a primary key!
151
+				if ($property->isPrimaryKey()) {
152
+					continue;
153
+				}
154
+				$properties[$name] = $property;
155
+			}
156
+			//$properties = array_merge($properties, $localProperties);
157
+
158
+		} else {
159
+			$properties = $this->getPropertiesForTable($table);
160
+		}
161
+
162
+		return $properties;
163
+	}
164
+
165
+		/**
166
+		 * Returns the list of properties for this table (ignoring parent tables).
167
+		 *
168
+		 * @param Table $table
169
+		 * @return AbstractBeanPropertyDescriptor[]
170
+		 */
171
+	private function getPropertiesForTable(Table $table)
172
+	{
173
+		$parentRelationship = $this->schemaAnalyzer->getParentRelationship($table->getName());
174
+		if ($parentRelationship) {
175
+			$ignoreColumns = $parentRelationship->getLocalColumns();
176
+		} else {
177
+			$ignoreColumns = [];
178
+		}
179
+
180
+		$beanPropertyDescriptors = [];
181
+
182
+		foreach ($table->getColumns() as $column) {
183
+			if (array_search($column->getName(), $ignoreColumns) !== false) {
184
+				continue;
185
+			}
186
+
187
+			$fk = $this->isPartOfForeignKey($table, $column);
188
+			if ($fk !== null) {
189
+				// Check that previously added descriptors are not added on same FK (can happen with multi key FK).
190
+				foreach ($beanPropertyDescriptors as $beanDescriptor) {
191
+					if ($beanDescriptor instanceof ObjectBeanPropertyDescriptor && $beanDescriptor->getForeignKey() === $fk) {
192
+						continue 2;
193
+					}
194
+				}
195
+				// Check that this property is not an inheritance relationship
196
+				$parentRelationship = $this->schemaAnalyzer->getParentRelationship($table->getName());
197
+				if ($parentRelationship === $fk) {
198
+					continue;
199
+				}
200
+
201
+				$beanPropertyDescriptors[] = new ObjectBeanPropertyDescriptor($table, $fk, $this->schemaAnalyzer);
202
+			} else {
203
+				$beanPropertyDescriptors[] = new ScalarBeanPropertyDescriptor($table, $column);
204
+			}
205
+		}
206
+
207
+		// Now, let's get the name of all properties and let's check there is no duplicate.
208
+		/** @var $names AbstractBeanPropertyDescriptor[] */
209
+		$names = [];
210
+		foreach ($beanPropertyDescriptors as $beanDescriptor) {
211
+			$name = $beanDescriptor->getUpperCamelCaseName();
212
+			if (isset($names[$name])) {
213
+				$names[$name]->useAlternativeName();
214
+				$beanDescriptor->useAlternativeName();
215
+			} else {
216
+				$names[$name] = $beanDescriptor;
217
+			}
218
+		}
219
+
220
+		// Final check (throw exceptions if problem arises)
221
+		$names = [];
222
+		foreach ($beanPropertyDescriptors as $beanDescriptor) {
223
+			$name = $beanDescriptor->getUpperCamelCaseName();
224
+			if (isset($names[$name])) {
225
+				throw new TDBMException("Unsolvable name conflict while generating method name");
226
+			} else {
227
+				$names[$name] = $beanDescriptor;
228
+			}
229
+		}
230
+
231
+		// Last step, let's rebuild the list with a map:
232
+		$beanPropertyDescriptorsMap = [];
233
+		foreach ($beanPropertyDescriptors as $beanDescriptor) {
234
+			$beanPropertyDescriptorsMap[$beanDescriptor->getLowerCamelCaseName()] = $beanDescriptor;
235
+		}
236
+
237
+		return $beanPropertyDescriptorsMap;
238
+	}
239
+
240
+	public function generateBeanConstructor() {
241
+		$constructorProperties = $this->getConstructorProperties();
242
+
243
+		$constructorCode = "    /**
244 244
      * The constructor takes all compulsory arguments.
245 245
      *
246 246
 %s
@@ -250,64 +250,64 @@  discard block
 block discarded – undo
250 250
     }
251 251
     ";
252 252
 
253
-        $paramAnnotations = [];
254
-        $arguments = [];
255
-        $assigns = [];
256
-        $parentConstructorArguments = [];
257
-
258
-        foreach ($constructorProperties as $property) {
259
-            $className = $property->getClassName();
260
-            if ($className) {
261
-                $arguments[] = $className.' '.$property->getVariableName();
262
-            } else {
263
-                $arguments[] = $property->getVariableName();
264
-            }
265
-            $paramAnnotations[] = $property->getParamAnnotation();
266
-            if ($property->getTable()->getName() === $this->table->getName()) {
267
-                $assigns[] = $property->getConstructorAssignCode();
268
-            } else {
269
-                $parentConstructorArguments[] = $property->getVariableName();
270
-            }
271
-        }
253
+		$paramAnnotations = [];
254
+		$arguments = [];
255
+		$assigns = [];
256
+		$parentConstructorArguments = [];
272 257
 
273
-        $parentConstrutorCode = sprintf("        parent::__construct(%s);\n", implode(', ', $parentConstructorArguments));
258
+		foreach ($constructorProperties as $property) {
259
+			$className = $property->getClassName();
260
+			if ($className) {
261
+				$arguments[] = $className.' '.$property->getVariableName();
262
+			} else {
263
+				$arguments[] = $property->getVariableName();
264
+			}
265
+			$paramAnnotations[] = $property->getParamAnnotation();
266
+			if ($property->getTable()->getName() === $this->table->getName()) {
267
+				$assigns[] = $property->getConstructorAssignCode();
268
+			} else {
269
+				$parentConstructorArguments[] = $property->getVariableName();
270
+			}
271
+		}
274 272
 
275
-        return sprintf($constructorCode, implode("\n", $paramAnnotations), implode(", ", $arguments), $parentConstrutorCode, implode("\n", $assigns));
276
-    }
273
+		$parentConstrutorCode = sprintf("        parent::__construct(%s);\n", implode(', ', $parentConstructorArguments));
277 274
 
278
-    public function generateDirectForeignKeysCode() {
279
-        $fks = $this->getIncomingForeignKeys();
275
+		return sprintf($constructorCode, implode("\n", $paramAnnotations), implode(", ", $arguments), $parentConstrutorCode, implode("\n", $assigns));
276
+	}
280 277
 
281
-        $fksByTable = [];
278
+	public function generateDirectForeignKeysCode() {
279
+		$fks = $this->getIncomingForeignKeys();
282 280
 
283
-        foreach ($fks as $fk) {
284
-            $fksByTable[$fk->getLocalTableName()][] = $fk;
285
-        }
281
+		$fksByTable = [];
286 282
 
287
-        /* @var $fksByMethodName ForeignKeyConstraint[] */
288
-        $fksByMethodName = [];
283
+		foreach ($fks as $fk) {
284
+			$fksByTable[$fk->getLocalTableName()][] = $fk;
285
+		}
289 286
 
290
-        foreach ($fksByTable as $tableName => $fksForTable) {
291
-            if (count($fksForTable) > 1) {
292
-                foreach ($fksForTable as $fk) {
293
-                    $methodName = 'get'.TDBMDaoGenerator::toCamelCase($fk->getLocalTableName()).'By';
287
+		/* @var $fksByMethodName ForeignKeyConstraint[] */
288
+		$fksByMethodName = [];
294 289
 
295
-                    $camelizedColumns = array_map(['Mouf\\Database\\TDBM\\Utils\\TDBMDaoGenerator', 'toCamelCase'], $fk->getLocalColumns());
290
+		foreach ($fksByTable as $tableName => $fksForTable) {
291
+			if (count($fksForTable) > 1) {
292
+				foreach ($fksForTable as $fk) {
293
+					$methodName = 'get'.TDBMDaoGenerator::toCamelCase($fk->getLocalTableName()).'By';
296 294
 
297
-                    $methodName .= implode('And', $camelizedColumns);
295
+					$camelizedColumns = array_map(['Mouf\\Database\\TDBM\\Utils\\TDBMDaoGenerator', 'toCamelCase'], $fk->getLocalColumns());
298 296
 
299
-                    $fksByMethodName[$methodName] = $fk;
300
-                }
301
-            } else {
302
-                $methodName = 'get'.TDBMDaoGenerator::toCamelCase($fksForTable[0]->getLocalTableName());
303
-                $fksByMethodName[$methodName] = $fk;
304
-            }
305
-        }
297
+					$methodName .= implode('And', $camelizedColumns);
306 298
 
307
-        $code = '';
299
+					$fksByMethodName[$methodName] = $fk;
300
+				}
301
+			} else {
302
+				$methodName = 'get'.TDBMDaoGenerator::toCamelCase($fksForTable[0]->getLocalTableName());
303
+				$fksByMethodName[$methodName] = $fk;
304
+			}
305
+		}
308 306
 
309
-        foreach ($fksByMethodName as $methodName => $fk) {
310
-            $getterCode = '    /**
307
+		$code = '';
308
+
309
+		foreach ($fksByMethodName as $methodName => $fk) {
310
+			$getterCode = '    /**
311 311
      * Returns the list of %s pointing to this bean via the %s column.
312 312
      *
313 313
      * @return %s[]|ResultIterator
@@ -319,109 +319,109 @@  discard block
 block discarded – undo
319 319
 
320 320
 ';
321 321
 
322
-            list($sql, $parametersCode) = $this->getFilters($fk);
323
-
324
-            $beanClass = TDBMDaoGenerator::getBeanNameFromTableName($fk->getLocalTableName());
325
-            $code .= sprintf($getterCode,
326
-                $beanClass,
327
-                implode(', ', $fk->getColumns()),
328
-                $beanClass,
329
-                $methodName,
330
-                var_export($fk->getLocalTableName(), true),
331
-                $sql,
332
-                $parametersCode
333
-            );
334
-        }
335
-
336
-        return $code;
337
-    }
338
-
339
-    private function getFilters(ForeignKeyConstraint $fk) {
340
-        $sqlParts = [];
341
-        $counter = 0;
342
-        $parameters = [];
343
-
344
-        $pkColumns = $this->table->getPrimaryKeyColumns();
345
-
346
-        foreach ($fk->getLocalColumns() as $columnName) {
347
-            $paramName = "tdbmparam".$counter;
348
-            $sqlParts[] = $fk->getLocalTableName().'.'.$columnName." = :".$paramName;
349
-
350
-            $pkColumn = $pkColumns[$counter];
351
-            $parameters[] = sprintf('%s => $this->get(%s, %s)', var_export($paramName, true), var_export($pkColumn, true), var_export($this->table->getName(), true));
352
-            $counter++;
353
-        }
354
-        $sql = "'".implode(' AND ', $sqlParts)."'";
355
-        $parametersCode = '[ '.implode(', ', $parameters).' ]';
356
-
357
-        return [$sql, $parametersCode];
358
-    }
359
-
360
-    /**
361
-     * Generate code section about pivot tables
362
-     *
363
-     * @return string;
364
-     */
365
-    public function generatePivotTableCode() {
366
-
367
-        $finalDescs = $this->getPivotTableDescriptors();
368
-
369
-        $code = '';
370
-
371
-        foreach ($finalDescs as $desc) {
372
-            $code .= $this->getPivotTableCode($desc['name'], $desc['table'], $desc['localFK'], $desc['remoteFK']);
373
-        }
374
-
375
-        return $code;
376
-    }
377
-
378
-    private function getPivotTableDescriptors() {
379
-        $descs = [];
380
-        foreach ($this->schemaAnalyzer->detectJunctionTables() as $table) {
381
-            // There are exactly 2 FKs since this is a pivot table.
382
-            $fks = array_values($table->getForeignKeys());
383
-
384
-            if ($fks[0]->getForeignTableName() === $this->table->getName()) {
385
-                $localFK = $fks[0];
386
-                $remoteFK = $fks[1];
387
-            } elseif ($fks[1]->getForeignTableName() === $this->table->getName()) {
388
-                $localFK = $fks[1];
389
-                $remoteFK = $fks[0];
390
-            } else {
391
-                continue;
392
-            }
393
-
394
-            $descs[$remoteFK->getForeignTableName()][] = [
395
-                'table' => $table,
396
-                'localFK' => $localFK,
397
-                'remoteFK' => $remoteFK
398
-            ];
399
-
400
-        }
401
-
402
-        $finalDescs = [];
403
-        foreach ($descs as $descArray) {
404
-            if (count($descArray) > 1) {
405
-                foreach ($descArray as $desc) {
406
-                    $desc['name'] = TDBMDaoGenerator::toCamelCase($desc['remoteFK']->getForeignTableName())."By".TDBMDaoGenerator::toCamelCase($desc['table']->getName());
407
-                    $finalDescs[] = $desc;
408
-                }
409
-            } else {
410
-                $desc = $descArray[0];
411
-                $desc['name'] = TDBMDaoGenerator::toCamelCase($desc['remoteFK']->getForeignTableName());
412
-                $finalDescs[] = $desc;
413
-            }
414
-        }
415
-
416
-        return $finalDescs;
417
-    }
418
-
419
-    public function getPivotTableCode($name, Table $table, ForeignKeyConstraint $localFK, ForeignKeyConstraint $remoteFK) {
420
-        $singularName = TDBMDaoGenerator::toSingular($name);
421
-        $remoteBeanName = TDBMDaoGenerator::getBeanNameFromTableName($remoteFK->getForeignTableName());
422
-        $variableName = '$'.TDBMDaoGenerator::toVariableName($remoteBeanName);
423
-
424
-        $str = '    /**
322
+			list($sql, $parametersCode) = $this->getFilters($fk);
323
+
324
+			$beanClass = TDBMDaoGenerator::getBeanNameFromTableName($fk->getLocalTableName());
325
+			$code .= sprintf($getterCode,
326
+				$beanClass,
327
+				implode(', ', $fk->getColumns()),
328
+				$beanClass,
329
+				$methodName,
330
+				var_export($fk->getLocalTableName(), true),
331
+				$sql,
332
+				$parametersCode
333
+			);
334
+		}
335
+
336
+		return $code;
337
+	}
338
+
339
+	private function getFilters(ForeignKeyConstraint $fk) {
340
+		$sqlParts = [];
341
+		$counter = 0;
342
+		$parameters = [];
343
+
344
+		$pkColumns = $this->table->getPrimaryKeyColumns();
345
+
346
+		foreach ($fk->getLocalColumns() as $columnName) {
347
+			$paramName = "tdbmparam".$counter;
348
+			$sqlParts[] = $fk->getLocalTableName().'.'.$columnName." = :".$paramName;
349
+
350
+			$pkColumn = $pkColumns[$counter];
351
+			$parameters[] = sprintf('%s => $this->get(%s, %s)', var_export($paramName, true), var_export($pkColumn, true), var_export($this->table->getName(), true));
352
+			$counter++;
353
+		}
354
+		$sql = "'".implode(' AND ', $sqlParts)."'";
355
+		$parametersCode = '[ '.implode(', ', $parameters).' ]';
356
+
357
+		return [$sql, $parametersCode];
358
+	}
359
+
360
+	/**
361
+	 * Generate code section about pivot tables
362
+	 *
363
+	 * @return string;
364
+	 */
365
+	public function generatePivotTableCode() {
366
+
367
+		$finalDescs = $this->getPivotTableDescriptors();
368
+
369
+		$code = '';
370
+
371
+		foreach ($finalDescs as $desc) {
372
+			$code .= $this->getPivotTableCode($desc['name'], $desc['table'], $desc['localFK'], $desc['remoteFK']);
373
+		}
374
+
375
+		return $code;
376
+	}
377
+
378
+	private function getPivotTableDescriptors() {
379
+		$descs = [];
380
+		foreach ($this->schemaAnalyzer->detectJunctionTables() as $table) {
381
+			// There are exactly 2 FKs since this is a pivot table.
382
+			$fks = array_values($table->getForeignKeys());
383
+
384
+			if ($fks[0]->getForeignTableName() === $this->table->getName()) {
385
+				$localFK = $fks[0];
386
+				$remoteFK = $fks[1];
387
+			} elseif ($fks[1]->getForeignTableName() === $this->table->getName()) {
388
+				$localFK = $fks[1];
389
+				$remoteFK = $fks[0];
390
+			} else {
391
+				continue;
392
+			}
393
+
394
+			$descs[$remoteFK->getForeignTableName()][] = [
395
+				'table' => $table,
396
+				'localFK' => $localFK,
397
+				'remoteFK' => $remoteFK
398
+			];
399
+
400
+		}
401
+
402
+		$finalDescs = [];
403
+		foreach ($descs as $descArray) {
404
+			if (count($descArray) > 1) {
405
+				foreach ($descArray as $desc) {
406
+					$desc['name'] = TDBMDaoGenerator::toCamelCase($desc['remoteFK']->getForeignTableName())."By".TDBMDaoGenerator::toCamelCase($desc['table']->getName());
407
+					$finalDescs[] = $desc;
408
+				}
409
+			} else {
410
+				$desc = $descArray[0];
411
+				$desc['name'] = TDBMDaoGenerator::toCamelCase($desc['remoteFK']->getForeignTableName());
412
+				$finalDescs[] = $desc;
413
+			}
414
+		}
415
+
416
+		return $finalDescs;
417
+	}
418
+
419
+	public function getPivotTableCode($name, Table $table, ForeignKeyConstraint $localFK, ForeignKeyConstraint $remoteFK) {
420
+		$singularName = TDBMDaoGenerator::toSingular($name);
421
+		$remoteBeanName = TDBMDaoGenerator::getBeanNameFromTableName($remoteFK->getForeignTableName());
422
+		$variableName = '$'.TDBMDaoGenerator::toVariableName($remoteBeanName);
423
+
424
+		$str = '    /**
425 425
      * Returns the list of %s associated to this bean via the %s pivot table.
426 426
      *
427 427
      * @return %s[]
@@ -431,9 +431,9 @@  discard block
 block discarded – undo
431 431
     }
432 432
 ';
433 433
 
434
-        $getterCode = sprintf($str, $remoteBeanName, $table->getName(), $remoteBeanName, $name, var_export($remoteFK->getLocalTableName(), true));
434
+		$getterCode = sprintf($str, $remoteBeanName, $table->getName(), $remoteBeanName, $name, var_export($remoteFK->getLocalTableName(), true));
435 435
 
436
-        $str = '    /**
436
+		$str = '    /**
437 437
      * Adds a relationship with %s associated to this bean via the %s pivot table.
438 438
      *
439 439
      * @param %s %s
@@ -443,9 +443,9 @@  discard block
 block discarded – undo
443 443
     }
444 444
 ';
445 445
 
446
-        $adderCode = sprintf($str, $remoteBeanName, $table->getName(), $remoteBeanName, $variableName, $singularName, $remoteBeanName, $variableName, var_export($remoteFK->getLocalTableName(), true), $variableName);
446
+		$adderCode = sprintf($str, $remoteBeanName, $table->getName(), $remoteBeanName, $variableName, $singularName, $remoteBeanName, $variableName, var_export($remoteFK->getLocalTableName(), true), $variableName);
447 447
 
448
-        $str = '    /**
448
+		$str = '    /**
449 449
      * Deletes the relationship with %s associated to this bean via the %s pivot table.
450 450
      *
451 451
      * @param %s %s
@@ -455,9 +455,9 @@  discard block
 block discarded – undo
455 455
     }
456 456
 ';
457 457
 
458
-        $removerCode = sprintf($str, $remoteBeanName, $table->getName(), $remoteBeanName, $variableName, $singularName, $remoteBeanName, $variableName, var_export($remoteFK->getLocalTableName(), true), $variableName);
458
+		$removerCode = sprintf($str, $remoteBeanName, $table->getName(), $remoteBeanName, $variableName, $singularName, $remoteBeanName, $variableName, var_export($remoteFK->getLocalTableName(), true), $variableName);
459 459
 
460
-        $str = '    /**
460
+		$str = '    /**
461 461
      * Returns whether this bean is associated with %s via the %s pivot table.
462 462
      *
463 463
      * @param %s %s
@@ -468,24 +468,24 @@  discard block
 block discarded – undo
468 468
     }
469 469
 ';
470 470
 
471
-        $hasCode = sprintf($str, $remoteBeanName, $table->getName(), $remoteBeanName, $variableName, $singularName, $remoteBeanName, $variableName, var_export($remoteFK->getLocalTableName(), true), $variableName);
471
+		$hasCode = sprintf($str, $remoteBeanName, $table->getName(), $remoteBeanName, $variableName, $singularName, $remoteBeanName, $variableName, var_export($remoteFK->getLocalTableName(), true), $variableName);
472 472
 
473 473
 
474
-        $code = $getterCode.$adderCode.$removerCode.$hasCode;
474
+		$code = $getterCode.$adderCode.$removerCode.$hasCode;
475 475
 
476
-        return $code;
477
-    }
476
+		return $code;
477
+	}
478 478
 
479
-    public function generateJsonSerialize() {
480
-        $tableName = $this->table->getName();
481
-        $parentFk = $this->schemaAnalyzer->getParentRelationship($tableName);
482
-        if ($parentFk !== null) {
483
-            $initializer = '$array = parent::jsonSerialize();';
484
-        } else {
485
-            $initializer = '$array = [];';
486
-        }
479
+	public function generateJsonSerialize() {
480
+		$tableName = $this->table->getName();
481
+		$parentFk = $this->schemaAnalyzer->getParentRelationship($tableName);
482
+		if ($parentFk !== null) {
483
+			$initializer = '$array = parent::jsonSerialize();';
484
+		} else {
485
+			$initializer = '$array = [];';
486
+		}
487 487
 
488
-        $str = '
488
+		$str = '
489 489
     /**
490 490
      * Serializes the object for JSON encoding
491 491
      *
@@ -501,53 +501,53 @@  discard block
 block discarded – undo
501 501
     }
502 502
 ';
503 503
 
504
-        $propertiesCode = '';
505
-        foreach ($this->beanPropertyDescriptors as $beanPropertyDescriptor) {
506
-            $propertiesCode .= $beanPropertyDescriptor->getJsonSerializeCode();
507
-        }
504
+		$propertiesCode = '';
505
+		foreach ($this->beanPropertyDescriptors as $beanPropertyDescriptor) {
506
+			$propertiesCode .= $beanPropertyDescriptor->getJsonSerializeCode();
507
+		}
508 508
 
509
-        // Many to many relationships:
509
+		// Many to many relationships:
510 510
 
511
-        $descs = $this->getPivotTableDescriptors();
511
+		$descs = $this->getPivotTableDescriptors();
512 512
 
513
-        $many2manyCode = '';
513
+		$many2manyCode = '';
514 514
 
515
-        foreach ($descs as $desc) {
516
-            $remoteFK = $desc['remoteFK'];
517
-            $remoteBeanName = TDBMDaoGenerator::getBeanNameFromTableName($remoteFK->getForeignTableName());
518
-            $variableName = '$'.TDBMDaoGenerator::toVariableName($remoteBeanName);
515
+		foreach ($descs as $desc) {
516
+			$remoteFK = $desc['remoteFK'];
517
+			$remoteBeanName = TDBMDaoGenerator::getBeanNameFromTableName($remoteFK->getForeignTableName());
518
+			$variableName = '$'.TDBMDaoGenerator::toVariableName($remoteBeanName);
519 519
 
520
-            $many2manyCode .= '        if (!$stopRecursion) {
520
+			$many2manyCode .= '        if (!$stopRecursion) {
521 521
             $array[\''.lcfirst($desc['name']).'\'] = array_map(function('.$remoteBeanName.' '.$variableName.') {
522 522
                 return '.$variableName.'->jsonSerialize(true);
523 523
             }, $this->get'.$desc['name'].'());
524 524
         }
525 525
         ';
526
-        }
527
-
528
-        return sprintf($str, $initializer, $propertiesCode, $many2manyCode);
529
-    }
530
-
531
-    /**
532
-     * Writes the PHP bean file with all getters and setters from the table passed in parameter.
533
-     *
534
-     * @param string $beannamespace The namespace of the bean
535
-     */
536
-    public function generatePhpCode($beannamespace) {
537
-        $baseClassName = TDBMDaoGenerator::getBaseBeanNameFromTableName($this->table->getName());
538
-        $className = TDBMDaoGenerator::getBeanNameFromTableName($this->table->getName());
539
-        $tableName = $this->table->getName();
540
-
541
-        $parentFk = $this->schemaAnalyzer->getParentRelationship($tableName);
542
-        if ($parentFk !== null) {
543
-            $extends = TDBMDaoGenerator::getBeanNameFromTableName($parentFk->getForeignTableName());
544
-            $use = "";
545
-        } else {
546
-            $extends = "AbstractTDBMObject";
547
-            $use = "use Mouf\\Database\\TDBM\\AbstractTDBMObject;\n\n";
548
-        }
549
-
550
-        $str = "<?php
526
+		}
527
+
528
+		return sprintf($str, $initializer, $propertiesCode, $many2manyCode);
529
+	}
530
+
531
+	/**
532
+	 * Writes the PHP bean file with all getters and setters from the table passed in parameter.
533
+	 *
534
+	 * @param string $beannamespace The namespace of the bean
535
+	 */
536
+	public function generatePhpCode($beannamespace) {
537
+		$baseClassName = TDBMDaoGenerator::getBaseBeanNameFromTableName($this->table->getName());
538
+		$className = TDBMDaoGenerator::getBeanNameFromTableName($this->table->getName());
539
+		$tableName = $this->table->getName();
540
+
541
+		$parentFk = $this->schemaAnalyzer->getParentRelationship($tableName);
542
+		if ($parentFk !== null) {
543
+			$extends = TDBMDaoGenerator::getBeanNameFromTableName($parentFk->getForeignTableName());
544
+			$use = "";
545
+		} else {
546
+			$extends = "AbstractTDBMObject";
547
+			$use = "use Mouf\\Database\\TDBM\\AbstractTDBMObject;\n\n";
548
+		}
549
+
550
+		$str = "<?php
551 551
 namespace {$beannamespace};
552 552
 
553 553
 use Mouf\\Database\\TDBM\\ResultIterator;
@@ -565,20 +565,20 @@  discard block
 block discarded – undo
565 565
 {
566 566
 ";
567 567
 
568
-        $str .= $this->generateBeanConstructor();
568
+		$str .= $this->generateBeanConstructor();
569 569
 
570 570
 
571 571
 
572
-        foreach ($this->getExposedProperties() as $property) {
573
-            $str .= $property->getGetterSetterCode();
574
-        }
572
+		foreach ($this->getExposedProperties() as $property) {
573
+			$str .= $property->getGetterSetterCode();
574
+		}
575 575
 
576
-        $str .= $this->generateDirectForeignKeysCode();
577
-        $str .= $this->generatePivotTableCode();
578
-        $str .= $this->generateJsonSerialize();
576
+		$str .= $this->generateDirectForeignKeysCode();
577
+		$str .= $this->generatePivotTableCode();
578
+		$str .= $this->generateJsonSerialize();
579 579
 
580
-        $str .= "}
580
+		$str .= "}
581 581
 ";
582
-        return $str;
583
-    }
582
+		return $str;
583
+	}
584 584
 }
Please login to merge, or discard this patch.
src/Mouf/Database/TDBM/Controllers/TdbmController.php 2 patches
Indentation   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -59,10 +59,10 @@  discard block
 block discarded – undo
59 59
 		}
60 60
 				
61 61
 		if ($this->daoNamespace == null && $this->beanNamespace == null) {
62
-            $classNameMapper = ClassNameMapper::createFromComposerFile(__DIR__.'/../../../../../../../../composer.json');
62
+			$classNameMapper = ClassNameMapper::createFromComposerFile(__DIR__.'/../../../../../../../../composer.json');
63 63
 
64 64
 			$autoloadNamespaces = $classNameMapper->getManagedNamespaces();
65
-            if ($autoloadNamespaces) {
65
+			if ($autoloadNamespaces) {
66 66
 				$this->autoloadDetected = true;
67 67
 				$rootNamespace = $autoloadNamespaces[0];
68 68
 				$this->daoNamespace = $rootNamespace."Dao";
@@ -138,7 +138,7 @@  discard block
 block discarded – undo
138 138
 		
139 139
 		$tdbmService = new InstanceProxy($name);
140 140
 		/* @var $tdbmService TDBMService */
141
-        $tables = $tdbmService->generateAllDaosAndBeans($daofactoryclassname, $daonamespace, $beannamespace, $storeInUtc);
141
+		$tables = $tdbmService->generateAllDaosAndBeans($daofactoryclassname, $daonamespace, $beannamespace, $storeInUtc);
142 142
 
143 143
 
144 144
 		$moufManager->declareComponent($daofactoryinstancename, $daonamespace."\\".$daofactoryclassname, false, MoufManager::DECLARE_ON_EXIST_KEEP_INCOMING_LINKS);
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -40,7 +40,7 @@  discard block
 block discarded – undo
40 40
 	 * @Action
41 41
 	 * //@Admin
42 42
 	 */
43
-	public function defaultAction($name, $selfedit="false") {
43
+	public function defaultAction($name, $selfedit = "false") {
44 44
 		$this->initController($name, $selfedit);
45 45
 		
46 46
 		// Fill variables
@@ -87,7 +87,7 @@  discard block
 block discarded – undo
87 87
 	 * @param string $name
88 88
 	 * @param bool $selfedit
89 89
 	 */
90
-	public function generate($name, $daonamespace, $beannamespace, $daofactoryclassname, $daofactoryinstancename, $storeInUtc = 0, $selfedit="false") {
90
+	public function generate($name, $daonamespace, $beannamespace, $daofactoryclassname, $daofactoryinstancename, $storeInUtc = 0, $selfedit = "false") {
91 91
 		$this->initController($name, $selfedit);
92 92
 
93 93
 		self::generateDaos($this->moufManager, $name, $daonamespace, $beannamespace, $daofactoryclassname, $daofactoryinstancename, $selfedit, $storeInUtc);
@@ -108,7 +108,7 @@  discard block
 block discarded – undo
108 108
 	 * @param bool $storeInUtc
109 109
 	 * @throws \Mouf\MoufException
110 110
 	 */
111
-	public static function generateDaos(MoufManager $moufManager, $name, $daonamespace, $beannamespace, $daofactoryclassname, $daofactoryinstancename, $selfedit="false", $storeInUtc = null) {
111
+	public static function generateDaos(MoufManager $moufManager, $name, $daonamespace, $beannamespace, $daofactoryclassname, $daofactoryinstancename, $selfedit = "false", $storeInUtc = null) {
112 112
 		$moufManager->setVariable("tdbmDefaultDaoNamespace_".$name, $daonamespace);
113 113
 		$moufManager->setVariable("tdbmDefaultBeanNamespace_".$name, $beannamespace);
114 114
 		$moufManager->setVariable("tdbmDefaultDaoFactoryName_".$name, $daofactoryclassname);
@@ -155,7 +155,7 @@  discard block
 block discarded – undo
155 155
 			$moufManager->bindComponentViaSetter($instanceName, "setTdbmService", $name);
156 156
 			$moufManager->bindComponentViaSetter($daofactoryinstancename, "set".$daoName, $instanceName);
157 157
 
158
-			$tableToBeanMap[$table] = $beannamespace . "\\" . TDBMDaoGenerator::getBeanNameFromTableName($table);
158
+			$tableToBeanMap[$table] = $beannamespace."\\".TDBMDaoGenerator::getBeanNameFromTableName($table);
159 159
 		}
160 160
 		$tdbmServiceDescriptor = $moufManager->getInstanceDescriptor($name);
161 161
 		$tdbmServiceDescriptor->getSetterProperty("setTableToBeanMap")->setValue($tableToBeanMap);
Please login to merge, or discard this patch.
src/Mouf/Database/TDBM/TDBMObjectStateEnum.php 1 patch
Indentation   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -25,10 +25,10 @@
 block discarded – undo
25 25
  * @author David Negrier
26 26
  */
27 27
 final class TDBMObjectStateEnum extends AbstractTDBMObject {
28
-    const STATE_DETACHED = "detached";
29
-    const STATE_NEW = "new";
30
-    const STATE_NOT_LOADED = "not loaded";
31
-    const STATE_LOADED = "loaded";
32
-    const STATE_DIRTY = "dirty";
33
-    const STATE_DELETED = "deleted";
28
+	const STATE_DETACHED = "detached";
29
+	const STATE_NEW = "new";
30
+	const STATE_NOT_LOADED = "not loaded";
31
+	const STATE_LOADED = "loaded";
32
+	const STATE_DIRTY = "dirty";
33
+	const STATE_DELETED = "deleted";
34 34
 }
Please login to merge, or discard this patch.
src/Mouf/Database/TDBM/InnerResultArray.php 1 patch
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -77,7 +77,7 @@
 block discarded – undo
77 77
 
78 78
 
79 79
 	private function toIndex($offset) {
80
-		if ($offset < 0 || filter_var($offset, FILTER_VALIDATE_INT) === false) {
80
+		if ($offset<0 || filter_var($offset, FILTER_VALIDATE_INT) === false) {
81 81
 			throw new TDBMInvalidOffsetException('Trying to access result set using offset "'.$offset.'". An offset must be a positive integer.');
82 82
 		}
83 83
 		if ($this->statement === null) {
Please login to merge, or discard this patch.
src/Mouf/Database/TDBM/InnerResultIterator.php 1 patch
Unused Use Statements   -1 removed lines patch added patch discarded remove patch
@@ -18,7 +18,6 @@
 block discarded – undo
18 18
  along with this program; if not, write to the Free Software
19 19
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20 20
  */
21
-use Doctrine\DBAL\Driver\Connection;
22 21
 
23 22
 
24 23
 /**
Please login to merge, or discard this patch.
src/Mouf/Database/TDBM/ResultIterator.php 2 patches
Unused Use Statements   -1 removed lines patch added patch discarded remove patch
@@ -18,7 +18,6 @@
 block discarded – undo
18 18
  along with this program; if not, write to the Free Software
19 19
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20 20
  */
21
-use Doctrine\DBAL\Driver\Connection;
22 21
 
23 22
 
24 23
 /**
Please login to merge, or discard this patch.
Doc Comments   +8 added lines patch added patch discarded remove patch
@@ -70,6 +70,13 @@  discard block
 block discarded – undo
70 70
 
71 71
 	private $mode;
72 72
 	
73
+	/**
74
+	 * @param string $magicSql
75
+	 * @param string $magicSqlCount
76
+	 * @param WeakrefObjectStorage $objectStorage
77
+	 * @param string|null $className
78
+	 * @param integer $mode
79
+	 */
73 80
 	public function __construct($magicSql, $magicSqlCount, array $parameters, array $columnDescriptors, $objectStorage, $className, TDBMService $tdbmService, MagicQuery $magicQuery, $mode)
74 81
 	{
75 82
 		$this->magicSql = $magicSql;
@@ -166,6 +173,7 @@  discard block
 block discarded – undo
166 173
 
167 174
 	/**
168 175
 	 * @param int $offset
176
+	 * @param integer $limit
169 177
 	 * @return PageIterator
170 178
 	 */
171 179
 	public function take($offset, $limit)
Please login to merge, or discard this patch.
src/views/tdbmGenerate.php 1 patch
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -29,7 +29,7 @@
 block discarded – undo
29 29
 <div class="control-group">
30 30
 	<label class="control-label">Store dates / timestamps in UTC:</label>
31 31
 	<div class="controls">
32
-		<input type="checkbox" name="storeInUtc" value="1" <?php echo $this->storeInUtc?'checked="checked"':"" ?>></input>
32
+		<input type="checkbox" name="storeInUtc" value="1" <?php echo $this->storeInUtc ? 'checked="checked"' : "" ?>></input>
33 33
 		<span class="help-block">Select this option if you want timestamps to be stored in UTC.
34 34
 		If your application supports several time zones, you should select this option to store all dates in
35 35
 		the same time zone.</span>
Please login to merge, or discard this patch.
src/Mouf/Database/TDBM/MapIterator.php 2 patches
Indentation   +71 added lines, -71 removed lines patch added patch discarded remove patch
@@ -9,85 +9,85 @@
 block discarded – undo
9 9
  */
10 10
 class MapIterator implements Iterator {
11 11
 
12
-    /**
13
-     * @var Iterator
14
-     */
15
-    protected $iterator;
12
+	/**
13
+	 * @var Iterator
14
+	 */
15
+	protected $iterator;
16 16
 
17
-    /**
18
-     * @var callable Modifies the current item in iterator
19
-     */
20
-    protected $callable;
17
+	/**
18
+	 * @var callable Modifies the current item in iterator
19
+	 */
20
+	protected $callable;
21 21
 
22
-    /**
23
-     * @param $iterator Iterator|array
24
-     * @param $callable callable This can have two parameters
25
-     * @throws TDBMException
26
-     */
27
-    public function __construct($iterator, callable $callable) {
28
-        if (is_array($iterator)) {
29
-            $this->iterator = new \ArrayIterator($iterator);
30
-        }
31
-        elseif (!($iterator instanceof Iterator))
32
-        {
33
-            throw new TDBMException("\$iterator parameter must be an instance of Iterator");
34
-        }
35
-        else
36
-        {
37
-            $this->iterator = $iterator;
38
-        }
22
+	/**
23
+	 * @param $iterator Iterator|array
24
+	 * @param $callable callable This can have two parameters
25
+	 * @throws TDBMException
26
+	 */
27
+	public function __construct($iterator, callable $callable) {
28
+		if (is_array($iterator)) {
29
+			$this->iterator = new \ArrayIterator($iterator);
30
+		}
31
+		elseif (!($iterator instanceof Iterator))
32
+		{
33
+			throw new TDBMException("\$iterator parameter must be an instance of Iterator");
34
+		}
35
+		else
36
+		{
37
+			$this->iterator = $iterator;
38
+		}
39 39
 
40
-        if ($callable instanceof \Closure) {
41
-            // make sure there's one argument
42
-            $reflection = new \ReflectionObject($callable);
43
-            if ($reflection->hasMethod('__invoke')) {
44
-                $method = $reflection->getMethod('__invoke');
45
-                if ($method->getNumberOfParameters() !== 1) {
46
-                    throw new TDBMException("\$callable must accept one and only one parameter.");
47
-                }
48
-            }
49
-        }
40
+		if ($callable instanceof \Closure) {
41
+			// make sure there's one argument
42
+			$reflection = new \ReflectionObject($callable);
43
+			if ($reflection->hasMethod('__invoke')) {
44
+				$method = $reflection->getMethod('__invoke');
45
+				if ($method->getNumberOfParameters() !== 1) {
46
+					throw new TDBMException("\$callable must accept one and only one parameter.");
47
+				}
48
+			}
49
+		}
50 50
 
51
-        $this->callable = $callable;
52
-    }
51
+		$this->callable = $callable;
52
+	}
53 53
 
54
-    /**
55
-     * Alters the current item with $this->callable and returns a new item.
56
-     * Be careful with your types as we can't do static type checking here!
57
-     * @return mixed
58
-     */
59
-    public function current()
60
-    {
61
-        $callable = $this->callable;
62
-        return $callable($this->iterator->current());
63
-    }
54
+	/**
55
+	 * Alters the current item with $this->callable and returns a new item.
56
+	 * Be careful with your types as we can't do static type checking here!
57
+	 * @return mixed
58
+	 */
59
+	public function current()
60
+	{
61
+		$callable = $this->callable;
62
+		return $callable($this->iterator->current());
63
+	}
64 64
 
65
-    public function next()
66
-    {
67
-        $this->iterator->next();
68
-    }
65
+	public function next()
66
+	{
67
+		$this->iterator->next();
68
+	}
69 69
 
70
-    public function key()
71
-    {
72
-        return $this->iterator->key();
73
-    }
70
+	public function key()
71
+	{
72
+		return $this->iterator->key();
73
+	}
74 74
 
75
-    public function valid()
76
-    {
77
-        return $this->iterator->valid();
78
-    }
75
+	public function valid()
76
+	{
77
+		return $this->iterator->valid();
78
+	}
79 79
 
80
-    public function rewind()
81
-    {
82
-        $this->iterator->rewind();
83
-    }
80
+	public function rewind()
81
+	{
82
+		$this->iterator->rewind();
83
+	}
84 84
 
85
-    /**
86
-     * Casts the iterator to a PHP array.
87
-     *
88
-     * @return array
89
-     */
90
-    public function toArray() {
91
-        return iterator_to_array($this);
92
-    }
85
+	/**
86
+	 * Casts the iterator to a PHP array.
87
+	 *
88
+	 * @return array
89
+	 */
90
+	public function toArray() {
91
+		return iterator_to_array($this);
92
+	}
93 93
 }
Please login to merge, or discard this patch.
Braces   +2 added lines, -4 removed lines patch added patch discarded remove patch
@@ -27,12 +27,10 @@
 block discarded – undo
27 27
     public function __construct($iterator, callable $callable) {
28 28
         if (is_array($iterator)) {
29 29
             $this->iterator = new \ArrayIterator($iterator);
30
-        }
31
-        elseif (!($iterator instanceof Iterator))
30
+        } elseif (!($iterator instanceof Iterator))
32 31
         {
33 32
             throw new TDBMException("\$iterator parameter must be an instance of Iterator");
34
-        }
35
-        else
33
+        } else
36 34
         {
37 35
             $this->iterator = $iterator;
38 36
         }
Please login to merge, or discard this patch.