Inheritance: extends Illuminate\Database\Eloquent\Model, implements Robbo\Presenter\PresentableInterface
 public function run()
 {
     $laravel = Template::create(['name' => 'Laravel']);
     Template::create(['name' => 'Wordpress']);
     Command::create(['name' => 'Down', 'script' => 'php artisan down', 'user' => 'deploy', 'step' => Command::BEFORE_ACTIVATE, 'target_type' => 'template', 'target_id' => $laravel->id]);
     Command::create(['name' => 'Run Migrations', 'script' => 'php artisan migrate --force', 'user' => 'deploy', 'step' => Command::BEFORE_ACTIVATE, 'target_type' => 'template', 'target_id' => $laravel->id]);
     Command::create(['name' => 'Up', 'script' => 'php artisan up', 'user' => 'deploy', 'step' => Command::BEFORE_ACTIVATE, 'target_type' => 'template', 'target_id' => $laravel->id]);
 }
 /**
  * Execute the command.
  */
 public function handle()
 {
     $template = Template::findOrFail($this->template_id);
     foreach ($template->commands as $command) {
         $data = $command->toArray();
         $this->project->commands()->create($data);
     }
     foreach ($template->variables as $variable) {
         $data = $variable->toArray();
         $this->project->variables()->create($data);
     }
     foreach ($template->sharedFiles as $file) {
         $data = $file->toArray();
         $this->project->sharedFiles()->create($data);
     }
     foreach ($template->configFiles as $file) {
         $data = $file->toArray();
         $this->project->configFiles()->create($data);
     }
 }
 /**
  * Run the migrations.
  *
  * @return void
  */
 public function up()
 {
     foreach ($this->relations as $relation) {
         $className = "REBELinBLUE\\Deployer\\{$relation}";
         $instance = new $className();
         $table = $instance->getTable();
         // Add the target fields to the tables
         Schema::table($table, function (Blueprint $table) {
             $table->integer('target_id')->nullable();
             $table->string('target_type')->nullable();
         });
         if (config('database.default') !== 'sqlite') {
             $drop = config('database.default') === 'mysql' ? 'FOREIGN KEY' : 'CONSTRAINT';
             DB::statement("ALTER TABLE {$table} DROP {$drop} {$table}_project_id_foreign");
         }
     }
     // Now find the existing templates in the project template and move them to templates table
     $templates = [];
     foreach (Project::where('is_template', true)->get() as $project) {
         $data = $project->toArray();
         unset($data['id']);
         $templates[$project->id] = Template::create($data);
     }
     // Now loop through the relations and set the target details
     foreach ($this->relations as $relation) {
         $className = "REBELinBLUE\\Deployer\\{$relation}";
         $instance = new $className();
         foreach ($instance->all() as $row) {
             $row->target_id = $row->project_id;
             $row->target_type = 'project';
             if (isset($templates[$row->project_id])) {
                 $row->target_id = $templates[$row->project_id]->id;
                 $row->target_type = 'template';
             }
             $row->save();
         }
     }
     // Remove any deleted non templates from group 1 to group 2
     $project = new Project();
     $project->where('is_template', false)->where('group_id', 1)->withTrashed()->update(['group_id' => 2]);
     // Remove the left over fake templates and the containing group
     Project::where('is_template', true)->forceDelete();
     Group::find(1)->forceDelete();
     // Remove the unneeded project ID column
     foreach ($this->relations as $relation) {
         $className = "REBELinBLUE\\Deployer\\{$relation}";
         $instance = new $className();
         $table = $instance->getTable();
         // You can't drop a column in SQLite
         if (config('database.default') !== 'sqlite') {
             DB::statement("ALTER TABLE {$table} DROP COLUMN project_id");
         }
         if (config('database.default') === 'mysql') {
             DB::statement("ALTER TABLE {$table} MODIFY target_id INT(11) NOT NULL");
             DB::statement("ALTER TABLE {$table} MODIFY target_type VARCHAR(255) NOT NULL");
         } elseif (config('database.default') === 'pgsql') {
             DB::statement("ALTER TABLE {$table} ALTER COLUMN target_id SET NOT NULL");
             DB::statement("ALTER TABLE {$table} ALTER COLUMN target_type SET NOT NULL");
         }
     }
 }