66
77use Doctrine \DBAL \Exception ;
88use Doctrine \DBAL \Schema \Column ;
9- use Doctrine \DBAL \Types \Types ;
109use Illuminate \Database \Eloquent \Model ;
1110use Orion \ValueObjects \Specs \Schema \Properties \AnySchemaProperty ;
1211use Orion \ValueObjects \Specs \Schema \Properties \ArraySchemaProperty ;
@@ -27,61 +26,68 @@ class SchemaManager
2726 public function getSchemaColumns (Model $ resourceModel ): array
2827 {
2928 $ table = $ resourceModel ->getConnection ()->getTablePrefix ().$ resourceModel ->getTable ();
30- $ schema = $ resourceModel ->getConnection ()->getDoctrineSchemaManager ();
31-
32- $ databasePlatform = $ schema ->getDatabasePlatform ();
33- $ databasePlatform ->registerDoctrineTypeMapping ('enum ' , 'string ' );
3429
3530 $ database = null ;
31+
3632 if (strpos ($ table , '. ' )) {
3733 [$ database , $ table ] = explode ('. ' , $ table );
3834 }
3935
40- return $ schema ->listTableColumns ($ table , $ database ) ?? [];
36+ if ((float ) app ()->version () < 11.0 ) {
37+ $ schema = $ resourceModel ->getConnection ()->getDoctrineSchemaManager ();
38+
39+ $ databasePlatform = $ schema ->getDatabasePlatform ();
40+ $ databasePlatform ->registerDoctrineTypeMapping ('enum ' , 'string ' );
41+
42+ return collect ($ schema ->listTableColumns ($ table , $ database ))->map (function (Column $ column ) {
43+ return [
44+ 'name ' => $ column ->getName (),
45+ 'type ' => $ column ->getType ()->getName (),
46+ 'nullable ' => !$ column ->getNotnull ()
47+ ];
48+ })->toArray ();
49+ }
50+
51+ return $ resourceModel ->getConnection ()->getSchemaBuilder ()->getColumns ($ table );
4152 }
4253
4354 /**
44- * @param Column $column
55+ * @param array $column
4556 * @param Model $resourceModel
4657 * @return string
4758 */
48- public function resolveSchemaPropertyClass (Column $ column , Model $ resourceModel ): string
59+ public function resolveSchemaPropertyClass (array $ column , Model $ resourceModel ): string
4960 {
50- if (in_array ($ column-> getName () , $ resourceModel ->getDates (), true )) {
61+ if (in_array ($ column[ ' name ' ] , $ resourceModel ->getDates (), true )) {
5162 return DateTimeSchemaProperty::class;
5263 }
5364
54- switch ($ column ->getType ()->getName ()) {
55- case Types::BIGINT :
56- case Types::INTEGER :
57- case Types::SMALLINT :
65+ switch ($ column ['type ' ]) {
66+ case strpos ($ column ['type ' ], 'int ' ) !== false :
5867 return IntegerSchemaProperty::class;
59- case Types:: FLOAT :
60- case Types:: DECIMAL :
68+ case ' float ' :
69+ case ' decimal ' :
6170 return NumberSchemaProperty::class;
62- case Types:: BOOLEAN :
71+ case strpos ( $ column [ ' type ' ], ' bool ' ) !== false :
6372 return BooleanSchemaProperty::class;
64- case Types::STRING :
65- case Types::TEXT :
66- case Types::ASCII_STRING :
67- case Types::GUID :
68- case Types::TIME_MUTABLE :
69- case Types::TIME_IMMUTABLE :
73+ case strpos ($ column ['type ' ], 'char ' ) !== false :
74+ case strpos ($ column ['type ' ], 'time ' ) !== false :
75+ case 'text ' :
76+ case 'string ' :
77+ case 'guid ' :
7078 return StringSchemaProperty::class;
71- case Types:: DATE_MUTABLE :
72- case Types:: DATE_IMMUTABLE :
79+ case ' date ' :
80+ case ' date_immutable ' :
7381 return DateSchemaProperty::class;
74- case Types:: DATETIME_MUTABLE :
75- case Types:: DATETIME_IMMUTABLE :
82+ case ' datetime ' :
83+ case ' datetime_immutable ' :
7684 return DateTimeSchemaProperty::class;
77- case Types::ARRAY :
78- case Types::SIMPLE_ARRAY :
85+ case 'array ' :
7986 return ArraySchemaProperty::class;
80- case Types::OBJECT :
81- case Types::JSON :
87+ case strpos ($ column ['type ' ], 'json ' ) !== false :
8288 return ObjectSchemaProperty::class;
83- case Types:: BINARY :
84- case Types:: BLOB :
89+ case ' binary ' :
90+ case ' blob ' :
8591 return BinarySchemaProperty::class;
8692 default :
8793 return AnySchemaProperty::class;
0 commit comments