22
33namespace Eghamat24 \DatabaseRepository \Commands ;
44
5+ use Illuminate \Support \Collection ;
56use Illuminate \Support \Str ;
67use Eghamat24 \DatabaseRepository \Creators \BaseCreator ;
78use Eghamat24 \DatabaseRepository \Creators \CreatorEnum ;
@@ -35,18 +36,7 @@ public function handle(): void
3536
3637 $ this ->checkEmpty ($ columns , $ this ->tableName );
3738
38- $ enums = [];
39- foreach ($ columns as $ _column ) {
40-
41- if ($ _column ->DATA_TYPE !== 'enum ' ) {
42- continue ;
43- }
44-
45- $ enumClassName = Str::studly (Str::singular (ucfirst (Str::camel ($ _column ->TABLE_NAME ))) . '_ ' . $ _column ->COLUMN_NAME ) . 'Enum ' ;
46- $ enums [$ enumClassName ] = array_filter (explode (', ' , str_replace (['enum( ' , '\'' , ') ' ], ['' , '' , '' ], $ _column ->COLUMN_TYPE )));
47- $ filenameWithPath = $ this ->relativeEnumsPath . $ enumClassName . '.php ' ;
48- $ this ->checkDelete ($ filenameWithPath , $ enumClassName , 'Enum ' );
49- }
39+ $ enums = $ this ->extractEnumsFromColumns ($ columns );
5040
5141 $ attributeStub = file_get_contents ($ this ->enumStubPath . 'attribute.stub ' );
5242
@@ -63,4 +53,46 @@ public function handle(): void
6353 $ this ->finalized ($ filenameWithPath , $ enumName , $ baseContent );
6454 }
6555 }
56+
57+
58+ /**
59+ * @param Collection $columns
60+ * @return array
61+ */
62+ public function extractEnumsFromColumns (Collection $ columns ): array
63+ {
64+ $ enums = [];
65+ foreach ($ columns as $ _column ) {
66+
67+ if ($ _column ->DATA_TYPE !== 'enum ' ) {
68+ continue ;
69+ }
70+
71+ $ enumClassName = $ this ->getEnumClassName ($ _column );
72+ $ enums [$ enumClassName ] = $ this ->extractEnumValues ($ _column ->COLUMN_TYPE );
73+
74+ $ this ->checkDelete (
75+ $ this ->relativeEnumsPath . $ enumClassName . '.php ' ,
76+ $ enumClassName ,
77+ 'Enum '
78+ );
79+ }
80+
81+ return $ enums ;
82+ }
83+
84+ private function getEnumClassName (mixed $ _column ): string
85+ {
86+ $ tableName = ucfirst (Str::camel ($ _column ->TABLE_NAME ));
87+ $ columnName = $ _column ->COLUMN_NAME ;
88+
89+ return Str::studly (Str::singular ($ tableName ) . '_ ' . $ columnName ) . 'Enum ' ;
90+ }
91+
92+ private function extractEnumValues ($ columnType ): array
93+ {
94+ $ items = explode (', ' , str_replace (['enum( ' , '\'' , ') ' ], ['' , '' , '' ], $ columnType ));
95+
96+ return array_filter ($ items );
97+ }
6698}
0 commit comments