场景,很多时候我们本地的代码是直接同步到线上的。如果我们需要添加或者修改数据库,是没有办法直接在线上执行
php artisan migrate
命令的
- 我的第一个想法是在
图1
处,让线上一分钟后执行,虽然一分钟的时间可能有点久,但是一种方法。不过我发现他并没有运行,可能是此处只能运行自己写的artisan
命令,而并不能运行框架自带的命令吧
后来我就想在一个路由里面执行,不过线上一般都是生产模式,会出现
图2
的报错。如果我们在控制台里,可以如图3
进入交互模式,直接yes
即可
我此时的想法是在执行之前修改配置,如下
Route::get('/foo', function () {
dump(config('app.env'));
app('config')->set('app.env', 'local');
dump(config('app.env'));
Artisan::call('migrate'); // 执行命令
dump(Artisan::output()); // 打印输出
});
Route::get('/artisan',function (){
// 填充SystemMenuTableSeeder 数据表 带--参数
Artisan::call('db:seed',['--class'=>'SystemMenuTableSeeder']);
// 清空缓存
Artisan::call('cache:clear');
dump(Artisan::output());
});
虽然打印的结果都是local
,可是依然是图2
的报错。我想可能是执行Artisan::call
的时候出现的原因,但还是不知道什么原因
这两种方式都可以修改配置
app('config')->set('app.env', 'local');
config(['app.env'=>'local']);
如果修改配置没有生效,可能需要在命令行执行
php artisan config:cache
既然以上不放不可行,那就临时修改config/app/php
文件图4
但是记得在线上执行成功后,要把配置及时修改过来