我正在尝试编写一个命令作为构建项目的快速入门。该命令要求输入数据库详细信息,然后更改.env文件。问题是该命令之后需要进行一些数据库查询,但不会重新加载.env变量。
我的问题是,有没有办法重新加载或覆盖.env变量运行时。如果没有,有没有办法再次调用另一个Artisan命令 ,那么框架会再次启动吗?
在我的命令中,我尝试在实际命令中执行$this->call('build:project')
,但即使在第二次调用中,也不会重新加载变量。
有没有办法在不让用户手动调用多个命令的情况下实现这一目标?
谢谢!
答案 0 :(得分:5)
Laravel使用从.env
文件中获取数据的配置文件。所以,你可以做的是在运行时override configuration values:
config(['database.default' => 'mysql']);
答案 1 :(得分:4)
我在重新加载.env变量时遇到了同样的问题,我用这个命令行修复了它,它允许你清除配置:
php artisan config:clear
希望有所帮助。问候。
答案 2 :(得分:0)
尝试清除缓存对我有帮助(无法SSH到服务器)
生产服务器上是否有{app route} /bootstrap/cache/config.php文件?删除它。
这对我有帮助
答案 3 :(得分:0)
作为 OP,我试图通过运行控制台命令并在过程中间询问数据库凭据来引导 Laravel 项目构建。
这是一个棘手的问题,我读过的任何内容都无法解决它:重置配置、缓存、Dotenv 重新加载等......似乎一旦控制台命令/操作被初始化,初始数据库连接就会一直保持到结束。
我找到的工作解决方案是绕过,在数据库修改完成后,通过使用本机shell exec命令并将php artisan命令作为参数传递来绕过这个缓存状态:
passthru('php artisan migrate');
所以,顺序是:
php artisan config:cache
passthru('php artisan migrate');
运行您的迁移shell_exec
会做同样的事情,但在静默模式下,而 passthru
将返回由控制台生成的输出。
https://www.php.net/manual/en/function.passthru.php
在 Laravel 8.52 上成功完成