-
Notifications
You must be signed in to change notification settings - Fork 41
/
FreshCommand.php
139 lines (117 loc) · 3.35 KB
/
FreshCommand.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
<?php
/*
* Copyright (c) Taylor Otwell, Leroy Merlin Brasil
* Copyrights licensed under the MIT License.
* See the accompanying LICENSE file for terms.
*/
namespace MongolidLaravel\Migrations\Commands;
use Illuminate\Console\Command;
use Illuminate\Console\ConfirmableTrait;
use Mongolid\Connection\Pool;
use Symfony\Component\Console\Input\InputOption;
class FreshCommand extends Command
{
use ConfirmableTrait;
/**
* The console command name.
*
* @var string
*/
protected $name = 'mongolid-migrate:fresh';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Drop database and re-run all migrations';
/**
* @var Pool
*/
private $pool;
public function __construct(Pool $pool)
{
parent::__construct();
$this->pool = $pool;
}
/**
* Execute the console command.
*/
public function handle()
{
if (!$this->confirmToProceed()) {
return;
}
$database = $this->input->getOption('database');
$this->dropDatabase($database);
$this->info('Dropped database successfully.');
$this->call(
'mongolid-migrate',
[
'--database' => $database,
'--path' => $this->input->getOption('path'),
'--realpath' => $this->input->getOption('realpath'),
'--force' => true,
]
);
if ($this->needsSeeding()) {
$this->runSeeder($database);
}
}
/**
* Drop all of the database collections.
*
* @param string $database
*/
protected function dropDatabase($database)
{
$connection = $this->pool->getConnection();
$database = $database ?? $connection->defaultDatabase;
$connection->getRawConnection()->dropDatabase($database);
}
/**
* Determine if the developer has requested database seeding.
*
* @return bool
*/
protected function needsSeeding()
{
return $this->option('seed') || $this->option('seeder');
}
/**
* Run the database seeder command.
*
* @param string $database
*/
protected function runSeeder($database)
{
$this->call(
'db:seed',
[
'--database' => $database,
'--class' => $this->option('seeder') ?: 'DatabaseSeeder',
'--force' => $this->option('force'),
]
);
}
/**
* Get the console command options.
*
* @return array
*/
protected function getOptions()
{
return [
['database', null, InputOption::VALUE_OPTIONAL, 'The database connection to use'],
['force', null, InputOption::VALUE_NONE, 'Force the operation to run when in production'],
['path', null, InputOption::VALUE_OPTIONAL, 'The path to the migrations files to be executed'],
[
'realpath',
null,
InputOption::VALUE_NONE,
'Indicate any provided migration file paths are pre-resolved absolute paths',
],
['seed', null, InputOption::VALUE_NONE, 'Indicates if the seed task should be re-run'],
['seeder', null, InputOption::VALUE_OPTIONAL, 'The class name of the root seeder'],
];
}
}