123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- <?php
-
- namespace Illuminate\Database\Console\Migrations;
-
- use Illuminate\Support\Str;
- use Illuminate\Support\Composer;
- use Illuminate\Database\Migrations\MigrationCreator;
-
- class MigrateMakeCommand extends BaseCommand
- {
- /**
- * The console command signature.
- *
- * @var string
- */
- protected $signature = 'make:migration {name : The name of the migration.}
- {--create= : The table to be created.}
- {--table= : The table to migrate.}
- {--path= : The location where the migration file should be created.}
- {--realpath : Indicate any provided migration file paths are pre-resolved absolute paths.}';
-
- /**
- * The console command description.
- *
- * @var string
- */
- protected $description = 'Create a new migration file';
-
- /**
- * The migration creator instance.
- *
- * @var \Illuminate\Database\Migrations\MigrationCreator
- */
- protected $creator;
-
- /**
- * The Composer instance.
- *
- * @var \Illuminate\Support\Composer
- */
- protected $composer;
-
- /**
- * Create a new migration install command instance.
- *
- * @param \Illuminate\Database\Migrations\MigrationCreator $creator
- * @param \Illuminate\Support\Composer $composer
- * @return void
- */
- public function __construct(MigrationCreator $creator, Composer $composer)
- {
- parent::__construct();
-
- $this->creator = $creator;
- $this->composer = $composer;
- }
-
- /**
- * Execute the console command.
- *
- * @return void
- */
- public function handle()
- {
- // It's possible for the developer to specify the tables to modify in this
- // schema operation. The developer may also specify if this table needs
- // to be freshly created so we can create the appropriate migrations.
- $name = Str::snake(trim($this->input->getArgument('name')));
-
- $table = $this->input->getOption('table');
-
- $create = $this->input->getOption('create') ?: false;
-
- // If no table was given as an option but a create option is given then we
- // will use the "create" option as the table name. This allows the devs
- // to pass a table name into this option as a short-cut for creating.
- if (! $table && is_string($create)) {
- $table = $create;
-
- $create = true;
- }
-
- // Next, we will attempt to guess the table name if this the migration has
- // "create" in the name. This will allow us to provide a convenient way
- // of creating migrations that create new tables for the application.
- if (! $table) {
- if (preg_match('/^create_(\w+)_table$/', $name, $matches)) {
- $table = $matches[1];
-
- $create = true;
- }
- }
-
- // Now we are ready to write the migration out to disk. Once we've written
- // the migration out, we will dump-autoload for the entire framework to
- // make sure that the migrations are registered by the class loaders.
- $this->writeMigration($name, $table, $create);
-
- $this->composer->dumpAutoloads();
- }
-
- /**
- * Write the migration file to disk.
- *
- * @param string $name
- * @param string $table
- * @param bool $create
- * @return string
- */
- protected function writeMigration($name, $table, $create)
- {
- $file = pathinfo($this->creator->create(
- $name, $this->getMigrationPath(), $table, $create
- ), PATHINFO_FILENAME);
-
- $this->line("<info>Created Migration:</info> {$file}");
- }
-
- /**
- * Get migration path (either specified by '--path' option or default location).
- *
- * @return string
- */
- protected function getMigrationPath()
- {
- if (! is_null($targetPath = $this->input->getOption('path'))) {
- return ! $this->usingRealPath()
- ? $this->laravel->basePath().'/'.$targetPath
- : $targetPath;
- }
-
- return parent::getMigrationPath();
- }
-
- /**
- * Determine if the given path(s) are pre-resolved "real" paths.
- *
- * @return bool
- */
- protected function usingRealPath()
- {
- return $this->input->hasOption('realpath') && $this->option('realpath');
- }
- }
|