Laravel数据库配置文件在.env和config/database.php中,优先读取.env;需正确设置DB_CONNECTION、DB_HOST、DB_PORT、DB_DATABASE、DB_USERNAME、DB_PASSWORD,并确保APP_KEY已生成、数据库用户有权限、migrations表存在。

数据库配置文件在哪、改哪些键
Laravel 的数据库配置集中在 .env 文件和 config/database.php 两个地方,优先以 .env 为准。别直接改 config/database.php 里的数组值——它只读取环境变量。
必须确保以下几项在 .env 中正确填写:
-
DB_CONNECTION=mysql(或pgsql、sqlite,不能拼错) -
DB_HOST=127.0.0.1(不是localhost,尤其 Docker 环境下容易连不上) -
DB_PORT=3306(MySQL 默认是 3306,但有些云数据库用 3307 或其他端口) -
DB_DATABASE=your_db_name(库名要提前手动创建好,Laravel 不自动建库) -
DB_USERNAME=root和DB_PASSWORD=(密码含特殊字符如@、/时,整个值要用双引号包裹)
运行迁移前必须确认的三件事
执行 php artisan migrate 报错,八成卡在这三个环节上,而不是语法问题。
- 确认
APP_KEY已生成:php artisan key:generate没跑过会导致加密组件异常,间接让迁移失败 - 确认数据库用户有
CREATE TABLE权限(比如阿里云 RDS 默认禁用,需进控制台开) - 确认
migrations表存在且结构正确——如果之前手动删过这个表,Laravel 会直接报Base table or view not found,此时要先php artisan migrate:install
SQLite 迁移为什么总提示 “no such table”
用 DB_CONNECTION=sqlite 时,路径配置不对是最常见原因。Laravel 不会自动创建 database/database.sqlite 文件,也不会报“文件不存在”,而是静默连接失败,后续所有查询都返回空或报错。
-
DB_DATABASE必须写绝对路径,例如DB_DATABASE=/var/www/myapp/database/database.sqlite - 确保该路径所在目录可写(
chmod 775 database/),否则迁移中途写入失败但不报错 - 第一次运行迁移前,手动创建空文件:
touch database/database.sqlite && chmod 664 database/database.sqlite
迁移回滚失败:找不到 migration 文件
php artisan migrate:rollback 报 Class xxx does not exist,通常不是类名写错,而是自动加载没更新。
- 修改或删除了
database/migrations/下的 PHP 文件后,必须运行composer dump-autoload - 如果用了自定义命名空间(比如把迁移放到了
app/Migrations),Laravel 默认不扫描,得在composer.json的autoload里加映射并重载 - 回滚到某一步时,注意
batch值是否连续——中间手动删过记录会导致断层,建议用--step=1逐条退,比--step=5更可控
.env 记得清缓存:php artisan config:clear,不然永远读的是旧配置。


















