44
55namespace Bow \Console \Command ;
66
7- use Bow \Console \AbstractCommand ;
7+ use Exception ;
8+ use Bow \Support \Str ;
89use Bow \Console \Color ;
9- use Bow \Console \Generator ;
10+ use Bow \Console \AbstractCommand ;
1011use Bow \Console \Traits \ConsoleTrait ;
11- use Bow \Database \Barry \Model ;
12- use Bow \Database \Database ;
13- use Bow \Support \Str ;
14- use Exception ;
1512
1613class SeederCommand extends AbstractCommand
1714{
@@ -24,9 +21,15 @@ class SeederCommand extends AbstractCommand
2421 */
2522 public function all (): void
2623 {
27- $ seeder = $ this -> setting -> getSeederDirectory () . ' /_database.php ' ;
24+ $ seeder_files = [] ;
2825
29- $ this ->make ($ seeder );
26+ foreach (glob ($ this ->setting ->getSeederDirectory () . '/*.php ' ) as $ seeder_file ) {
27+ $ seeder_files [$ seeder_file ] = $ this ->normalizeClassName (explode ('. ' , basename ($ seeder_file ))[0 ]);
28+ }
29+
30+ foreach ($ seeder_files as $ seeder_file => $ seeder_class_name ) {
31+ $ this ->make ($ seeder_file , $ seeder_class_name );
32+ }
3033 }
3134
3235 /**
@@ -35,34 +38,15 @@ public function all(): void
3538 * @param string $seed_filename
3639 * @return void
3740 */
38- private function make (string $ seed_filename ): void
41+ private function make (string $ seed_filename, string $ seeder_class_name ): void
3942 {
40- $ seeds = include $ seed_filename ;
41-
42- $ seed_collection = array_merge ($ seeds );
43-
44- // Get the database connexion
45- $ connection = $ this ->arg ->getParameters ()->get ('--connection ' , config ("database.default " ));
46-
4743 try {
48- $ connection = Database::connection ($ connection );
49-
50- foreach ($ seed_collection as $ table => $ seed ) {
51- if (class_exists ($ table )) {
52- $ instance = app ($ table );
53- if ($ instance instanceof Model) {
54- $ table = $ instance ->getTable ();
55- }
56- }
57-
58- $ result = $ connection ->table ($ table )->insert ($ seed );
59-
60- echo Color::green ("$ result seed " . ($ result > 1 ? 's ' : '' ) . " on $ table table \n" );
61- }
44+ include_once $ seed_filename ;
45+ (new $ seeder_class_name ())->run ();
46+ echo Color::green ("Seeding completed: $ seed_filename \n" );
6247 } catch (Exception $ e ) {
63- echo Color::red ($ e ->getMessage ());
64-
65- exit (1 );
48+ echo Color::red ("Seeding failed for: $ seed_filename " );
49+ echo Color::red ("\n" . $ e ->getMessage ());
6650 }
6751 }
6852
@@ -72,22 +56,37 @@ private function make(string $seed_filename): void
7256 * @param string|null $seeder_name
7357 * @return void
7458 */
75- public function table (?string $ seeder_name = null ): void
59+ public function file (?string $ seeder_class_name = null ): void
7660 {
77- if (is_null ($ seeder_name )) {
78- $ this ->throwFailsCommand ('Specify the seeder table name ' , 'help seed ' );
61+ if (is_null ($ seeder_class_name )) {
62+ $ this ->throwFailsCommand ('Specify the seeder file name ' , 'help seed ' );
63+ }
64+
65+ $ seeder_files = [];
66+
67+ foreach (glob ($ this ->setting ->getSeederDirectory () . '/*.php ' ) as $ seeder_file ) {
68+ $ interal_class_base_name = $ this ->normalizeClassName (explode ('. ' , basename ($ seeder_file ))[0 ]);
69+ if ($ seeder_class_name != $ interal_class_base_name ) {
70+ continue ;
71+ }
72+ $ seeder_files [$ seeder_file ] = $ interal_class_base_name ;
73+ break ;
7974 }
8075
81- $ seeder_name = trim ($ seeder_name );
76+ foreach ($ seeder_files as $ file => $ seeder_class_name ) {
77+ echo Color::green ("Seeding: $ file " );
8278
83- if (!file_exists ($ this ->setting ->getSeederDirectory () . "/ {$ seeder_name }.php " )) {
84- echo Color::red ("Seeder $ seeder_name not exists. " );
79+ $ this ->make ($ file , $ seeder_class_name );
8580
86- exit ( 1 );
81+ echo Color:: green ( " Seeding completed: $ file " );
8782 }
83+ }
84+
85+ private function normalizeClassName (string $ seeder_class_name ): string
86+ {
87+ $ time = explode ('- ' , $ seeder_class_name )[0 ];
88+ $ seeder_class_name = str_replace ($ time , '' , $ seeder_class_name );
8889
89- $ this ->make (
90- $ this ->setting ->getSeederDirectory () . "/ {$ seeder_name }.php "
91- );
90+ return Str::camel ($ seeder_class_name ) . $ time ;
9291 }
9392}
0 commit comments