-
Notifications
You must be signed in to change notification settings - Fork 11.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Avoid duplicate code for create table commands by extending new `Illu…
…minate\Console\MigrationGeneratorCommand` (#48603) * wip Signed-off-by: Mior Muhammad Zaki <[email protected]> * wip Signed-off-by: Mior Muhammad Zaki <[email protected]> * wip Signed-off-by: Mior Muhammad Zaki <[email protected]> * wip Signed-off-by: Mior Muhammad Zaki <[email protected]> * Apply fixes from StyleCI * wip Signed-off-by: Mior Muhammad Zaki <[email protected]> * Apply fixes from StyleCI * wip Signed-off-by: Mior Muhammad Zaki <[email protected]> * formatting --------- Signed-off-by: Mior Muhammad Zaki <[email protected]> Co-authored-by: StyleCI Bot <[email protected]> Co-authored-by: Taylor Otwell <[email protected]>
- Loading branch information
1 parent
2bfb70b
commit 6b0ae71
Showing
15 changed files
with
284 additions
and
466 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,120 @@ | ||
<?php | ||
|
||
namespace Illuminate\Console; | ||
|
||
use Illuminate\Filesystem\Filesystem; | ||
use Illuminate\Support\Composer; | ||
|
||
abstract class MigrationGeneratorCommand extends Command | ||
{ | ||
/** | ||
* The filesystem instance. | ||
* | ||
* @var \Illuminate\Filesystem\Filesystem | ||
*/ | ||
protected $files; | ||
|
||
/** | ||
* The Composer instance. | ||
* | ||
* @var \Illuminate\Support\Composer | ||
* | ||
* @deprecated Will be removed in a future Laravel version. | ||
*/ | ||
protected $composer; | ||
|
||
/** | ||
* Create a new migration generator command instance. | ||
* | ||
* @param \Illuminate\Filesystem\Filesystem $files | ||
* @param \Illuminate\Support\Composer $composer | ||
* @return void | ||
*/ | ||
public function __construct(Filesystem $files, Composer $composer) | ||
{ | ||
parent::__construct(); | ||
|
||
$this->files = $files; | ||
$this->composer = $composer; | ||
} | ||
|
||
/** | ||
* Get the migration table name. | ||
* | ||
* @return string | ||
*/ | ||
abstract protected function migrationTableName(); | ||
|
||
/** | ||
* Get the path to the migration stub file. | ||
* | ||
* @return string | ||
*/ | ||
abstract protected function migrationStubFile(); | ||
|
||
/** | ||
* Execute the console command. | ||
* | ||
* @return int | ||
*/ | ||
public function handle() | ||
{ | ||
$table = $this->migrationTableName(); | ||
|
||
if ($this->migrationExists($table)) { | ||
$this->components->error('Migration already exists.'); | ||
|
||
return 1; | ||
} | ||
|
||
$this->replaceMigrationPlaceholders( | ||
$this->createBaseMigration($table), $table | ||
); | ||
|
||
$this->components->info('Migration created successfully.'); | ||
|
||
return 0; | ||
} | ||
|
||
/** | ||
* Create a base migration file for the table. | ||
* | ||
* @param string $table | ||
* @return string | ||
*/ | ||
protected function createBaseMigration($table) | ||
{ | ||
return $this->laravel['migration.creator']->create( | ||
'create_'.$table.'_table', $this->laravel->databasePath('/migrations') | ||
); | ||
} | ||
|
||
/** | ||
* Replace the placeholders in the generated migration file. | ||
* | ||
* @param string $path | ||
* @param string $table | ||
* @return void | ||
*/ | ||
protected function replaceMigrationPlaceholders($path, $table) | ||
{ | ||
$stub = str_replace( | ||
'{{table}}', $table, $this->files->get($this->migrationStubFile()) | ||
); | ||
|
||
$this->files->put($path, $stub); | ||
} | ||
|
||
/** | ||
* Determine whether a migration for the table already exists. | ||
* | ||
* @param string $table | ||
* @return bool | ||
*/ | ||
protected function migrationExists($table) | ||
{ | ||
return count($this->files->glob( | ||
$this->laravel->joinPaths($this->laravel->databasePath('migrations'), '*_*_*_*_create_'.$table.'_table.php') | ||
)) !== 0; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.