22
33namespace InfyOm \Generator \Utils ;
44
5- use DB ;
65use Doctrine \DBAL \Schema \AbstractSchemaManager ;
76use Doctrine \DBAL \Schema \Column ;
7+ use Illuminate \Support \Facades \Schema ;
88use Illuminate \Support \Str ;
9+ use InfyOm \Generator \Common \GeneratorConfig ;
910use InfyOm \Generator \Common \GeneratorField ;
1011use InfyOm \Generator \Common \GeneratorFieldRelation ;
1112
@@ -59,39 +60,17 @@ class TableFieldsGenerator
5960 /** @var \Doctrine\DBAL\Schema\Table */
6061 public $ tableDetails ;
6162
63+ public GeneratorConfig $ config ;
64+
6265 public function __construct ($ tableName , $ ignoredFields , $ connection = '' )
6366 {
6467 $ this ->tableName = $ tableName ;
6568 $ this ->ignoredFields = $ ignoredFields ;
6669
67- if (!empty ($ connection )) {
68- $ this ->schemaManager = DB ::connection ($ connection )->getDoctrineSchemaManager ();
69- } else {
70- $ this ->schemaManager = DB ::getDoctrineSchemaManager ();
71- }
72-
73- $ platform = $ this ->schemaManager ->getDatabasePlatform ();
74- $ defaultMappings = [
75- 'enum ' => 'string ' ,
76- 'json ' => 'text ' ,
77- 'bit ' => 'boolean ' ,
78- ];
79-
80- // $this->tableDetails = $this->schemaManager->listTableDetails($this->tableName);
81-
82- $ mappings = config ('laravel_generator.from_table.doctrine_mappings ' , []);
83- $ mappings = array_merge ($ mappings , $ defaultMappings );
84- foreach ($ mappings as $ dbType => $ doctrineType ) {
85- $ platform ->registerDoctrineTypeMapping ($ dbType , $ doctrineType );
86- }
87- // Added
88- $ this ->tableDetails = $ this ->schemaManager ->listTableDetails ($ this ->tableName );
89-
90- $ columns = $ this ->schemaManager ->listTableColumns ($ tableName );
91-
70+ $ columns = Schema::getColumns ($ tableName );
9271 $ this ->columns = [];
9372 foreach ($ columns as $ column ) {
94- if (!in_array ($ column-> getName () , $ ignoredFields )) {
73+ if (!in_array ($ column[ ' name ' ] , $ ignoredFields )) {
9574 $ this ->columns [] = $ column ;
9675 }
9776 }
@@ -107,7 +86,7 @@ public function __construct($tableName, $ignoredFields, $connection = '')
10786 public function prepareFieldsFromTable ()
10887 {
10988 foreach ($ this ->columns as $ column ) {
110- $ type = $ column-> getType ()-> getName () ;
89+ $ type = $ column[ ' type_name ' ] ;
11190
11291 switch ($ type ) {
11392 case 'integer ' :
@@ -120,7 +99,7 @@ public function prepareFieldsFromTable()
12099 $ field = $ this ->generateIntFieldInput ($ column , 'bigInteger ' );
121100 break ;
122101 case 'boolean ' :
123- $ name = Str::title (str_replace ('_ ' , ' ' , $ column-> getName () ));
102+ $ name = Str::title (str_replace ('_ ' , ' ' , $ column[ ' name ' ] ));
124103 $ field = $ this ->generateField ($ column , 'boolean ' , 'checkbox ' );
125104 break ;
126105 case 'datetime ' :
@@ -160,8 +139,8 @@ public function prepareFieldsFromTable()
160139 $ field ->inIndex = false ;
161140 $ field ->inView = false ;
162141 }
163- $ field ->isNotNull = $ column-> getNotNull () ;
164- $ field ->description = $ column-> getComment () ?? '' ; // get comments from table
142+ $ field ->isNotNull = ! $ column[ ' nullable ' ] ;
143+ $ field ->description = $ column[ ' comment ' ] ?? '' ; // get comments from table
165144
166145 $ this ->fields [] = $ field ;
167146 }
@@ -176,9 +155,14 @@ public function prepareFieldsFromTable()
176155 */
177156 public function getPrimaryKeyOfTable ($ tableName )
178157 {
179- $ column = $ this ->schemaManager ->listTableDetails ($ tableName )->getPrimaryKey ();
158+ $ column = '' ;
159+ foreach (Schema::getIndexes ($ tableName ) as $ index ) {
160+ if ($ index ['primary ' ]) {
161+ $ column = $ index ['columns ' ][0 ];
162+ }
163+ }
180164
181- return $ column ? $ column -> getColumns ()[ 0 ] : '' ;
165+ return $ column ;
182166 }
183167
184168 /**
@@ -210,17 +194,17 @@ public static function getTimestampFieldNames()
210194 private function generateIntFieldInput ($ column , $ dbType )
211195 {
212196 $ field = new GeneratorField ();
213- $ field ->name = $ column-> getName () ;
197+ $ field ->name = $ column[ ' name ' ] ;
214198 $ field ->parseDBType ($ dbType );
215199 $ field ->htmlType = 'number ' ;
216200
217- if ($ column-> getAutoincrement () ) {
201+ if ($ column[ ' auto_increment ' ] ) {
218202 $ field ->dbType .= ',true ' ;
219203 } else {
220204 $ field ->dbType .= ',false ' ;
221205 }
222206
223- if ($ column-> getUnsigned ( )) {
207+ if (str_contains ( $ column[ ' type ' ], ' unsigned ' )) {
224208 $ field ->dbType .= ',true ' ;
225209 }
226210
@@ -260,8 +244,8 @@ private function checkForPrimary(GeneratorField $field)
260244 private function generateField ($ column , $ dbType , $ htmlType )
261245 {
262246 $ field = new GeneratorField ();
263- $ field ->name = $ column-> getName () ;
264- $ field ->fieldDetails = $ this -> tableDetails -> getColumn ( $ field -> name ) ;
247+ $ field ->name = $ column[ ' name ' ] ;
248+ $ field ->fieldDetails = $ column ;
265249 $ field ->parseDBType ($ dbType ); //, $column); TODO: handle column param
266250 $ field ->parseHtmlInput ($ htmlType );
267251
@@ -279,12 +263,13 @@ private function generateField($column, $dbType, $htmlType)
279263 private function generateNumberInput ($ column , $ dbType )
280264 {
281265 $ field = new GeneratorField ();
282- $ field ->name = $ column ->getName ();
283- $ field ->parseDBType ($ dbType .', ' .$ column ->getPrecision ().', ' .$ column ->getScale ());
266+ $ field ->name = $ column ['name ' ];
267+ $ length = get_field_length ($ column ['type ' ]);
268+ $ field ->parseDBType ($ dbType .', ' .get_field_precision ($ length ).', ' .get_field_scale ($ length ));
284269 $ field ->htmlType = 'number ' ;
285270
286271 if ($ dbType === 'decimal ' ) {
287- $ field ->numberDecimalPoints = $ column -> getScale () ;
272+ $ field ->numberDecimalPoints = explode ( ' , ' , $ length )[ 1 ] ;
288273 }
289274
290275 return $ this ->checkForPrimary ($ field );
@@ -306,25 +291,27 @@ public function prepareRelations()
306291 */
307292 public function prepareForeignKeys ()
308293 {
309- $ tables = $ this -> schemaManager -> listTables ();
294+ $ tables = Schema:: getTables ();
310295
311296 $ fields = [];
312297
313298 foreach ($ tables as $ table ) {
314- $ primaryKey = $ table ->getPrimaryKey ();
315- if ($ primaryKey ) {
316- $ primaryKey = $ primaryKey ->getColumns ()[0 ];
299+ $ primaryKey = '' ;
300+ foreach (Schema::getIndexes ($ table ['name ' ]) as $ index ) {
301+ if ($ index ['primary ' ]) {
302+ $ primaryKey = $ index ['columns ' ][0 ];
303+ }
317304 }
318305 $ formattedForeignKeys = [];
319- $ tableForeignKeys = $ table -> getForeignKeys ();
306+ $ tableForeignKeys = Schema:: getForeignKeys ($ table [ ' name ' ] );
320307 foreach ($ tableForeignKeys as $ tableForeignKey ) {
321308 $ generatorForeignKey = new GeneratorForeignKey ();
322- $ generatorForeignKey ->name = $ tableForeignKey-> getName () ;
323- $ generatorForeignKey ->localField = $ tableForeignKey-> getLocalColumns () [0 ];
324- $ generatorForeignKey ->foreignField = $ tableForeignKey-> getForeignColumns () [0 ];
325- $ generatorForeignKey ->foreignTable = $ tableForeignKey-> getForeignTableName () ;
326- $ generatorForeignKey ->onUpdate = $ tableForeignKey-> onUpdate () ;
327- $ generatorForeignKey ->onDelete = $ tableForeignKey-> onDelete () ;
309+ $ generatorForeignKey ->name = $ tableForeignKey[ ' name ' ] ;
310+ $ generatorForeignKey ->localField = $ tableForeignKey[ ' columns ' ] [0 ];
311+ $ generatorForeignKey ->foreignField = $ tableForeignKey[ ' foreign_columns ' ] [0 ];
312+ $ generatorForeignKey ->foreignTable = $ tableForeignKey[ ' foreign_table ' ] ;
313+ $ generatorForeignKey ->onUpdate = $ tableForeignKey[ ' on_update ' ] ;
314+ $ generatorForeignKey ->onDelete = $ tableForeignKey[ ' on_delete ' ] ;
328315
329316 $ formattedForeignKeys [] = $ generatorForeignKey ;
330317 }
@@ -333,7 +320,7 @@ public function prepareForeignKeys()
333320 $ generatorTable ->primaryKey = $ primaryKey ;
334321 $ generatorTable ->foreignKeys = $ formattedForeignKeys ;
335322
336- $ fields [$ table-> getName () ] = $ generatorTable ;
323+ $ fields [$ table[ ' name ' ] ] = $ generatorTable ;
337324 }
338325
339326 return $ fields ;
@@ -550,4 +537,4 @@ private function detectManyToOne($tables, $modelTable)
550537
551538 return $ manyToOneRelations ;
552539 }
553- }
540+ }
0 commit comments