You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel项目安装器执行migrate报错:数据库访问权限被拒绝

问题

我为Laravel项目编写了install.php文件,用于执行数据库迁移(migrate)和数据填充(db:seed),代码如下:

require __DIR__ . '/../vendor/autoload.php';
$app = require_once __DIR__ . '/../bootstrap/app.php';
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
file_put_contents('.env', $envContent);


ob_start();
$kernel->call('migrate', ['--force' => true]);
$kernel->call('db:seed');

该文件可正常保存.env文件并执行Artisan命令,但执行migrate时出现以下错误:

SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES) (SQL: select * from information_schema.tables where table_schema = spnv_store and table_name = migrations and table_type = 'BASE TABLE')

我的数据库用户名并非root,主机也不是localhost,怀疑调用migrate时未读取.env中的数据库配置,恳请协助解决。

解决方案

问题核心是Laravel在初始化$app实例时已经加载了环境配置,而你是在这之后才写入的.env文件,导致迁移命令使用的还是旧的数据库配置。以下是两种可行的解决办法:

方法一:调整顺序,先写入.env再初始化应用

把写入.env的代码移到最前面,确保应用初始化时读取的是新的配置:

// 先写入.env文件
file_put_contents('.env', $envContent);

// 再加载依赖并初始化应用
require __DIR__ . '/../vendor/autoload.php';
$app = require_once __DIR__ . '/../bootstrap/app.php';
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);

ob_start();
$kernel->call('migrate', ['--force' => true]);
$kernel->call('db:seed');

方法二:写入.env后手动重新加载配置

如果无法调整代码顺序,可以在写入.env后强制重新加载环境变量和配置:

require __DIR__ . '/../vendor/autoload.php';
$app = require_once __DIR__ . '/../bootstrap/app.php';
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);

// 写入.env文件
file_put_contents('.env', $envContent);

// 重新加载环境变量和配置
$app->useEnvironmentPath(__DIR__ . '/../');
$app->bootstrapWith([
    \Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables::class,
    \Illuminate\Foundation\Bootstrap\LoadConfiguration::class,
]);

// 若存在配置缓存,先清除
$kernel->call('config:clear');

ob_start();
$kernel->call('migrate', ['--force' => true]);
$kernel->call('db:seed');

内容的提问来源于stack exchange,提问作者skdev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 18:57:08