laragon中laravel配sqlite需确保路径绝对、权限正确、配置精简:仅保留db_connection=sqlite和db_database=/absolute/path/to/database.sqlite,删除所有其他db_配置项;手动创建database.sqlite并设www用户读写权限;测试环境改phpunit.xml而非.env。

Laragon 中用 Laravel 配 SQLite 是本地开发最轻量、最省事的选择,但配置稍有偏差就会报 unable to open database file 或迁移失败。关键不在“能不能”,而在“路径对不对、权限够不够、配置干不干净”。
用 SQLite 必须删光冗余 DB_ 配置项
Laravel 在 DB_CONNECTION=sqlite 时完全不需要主机、端口、用户名和密码。如果 .env 里还留着 DB_HOST、DB_PORT、DB_USERNAME、DB_PASSWORD,哪怕值为空或注释了,某些版本(尤其带自定义连接逻辑的)仍可能触发读取异常或干扰初始化。
只保留这两行:
-
DB_CONNECTION=sqlite -
DB_DATABASE=/absolute/path/to/database.sqlite(推荐用database_path('database.sqlite')对应的绝对路径)
其他所有 DB_XXX 行全部删除或彻底注释掉(别留空行或空值)。
手动创建文件并设好权限
Laravel 不会自动创建 database/database.sqlite 文件,也不会帮你赋权。Laragon 默认用 www 用户运行 PHP-FPM(不是 www-data),所以权限要对准它:
- 在项目根目录执行:
touch database/database.sqlite
- 设权限(确保
www用户可读写):chmod 664 database/database.sqlite chown www:www database/database.sqlite
- 检查
storage/和bootstrap/cache/同样属于www:www,否则 artisan 命令会失败。
路径必须是绝对路径,别信相对路径
在控制器、命令或原生 PDO 中写 'sqlite:database.sqlite' 必然失败——PHP 工作目录是 public/ 或项目根,不是你代码所在位置。正确写法只有两种:
- ✅ 推荐:用 Laravel 辅助函数
$pdo = new PDO('sqlite:' . database_path('database.sqlite')); - ✅ 备选:用
__DIR__(仅限数据库文件与当前文件同级或子目录)$pdo = new PDO('sqlite:' . __DIR__ . '/database.sqlite');注意扩展名统一小写
.sqlite;.db也可用,但保持全项目一致,避免大小写敏感系统出错。
测试环境想用 :memory:?改 phpunit.xml,不是 .env
.env.testing 里改 DB_DATABASE=:memory: 没用。PHPUnit 启动时直接读 phpunit.xml 的 <env></env> 配置。在 <php></php> 节点内加:
<env name="DB_CONNECTION" value="sqlite"></env><env name="DB_DATABASE" value=":memory:"></env>
这样每次测试都跑内存库,快且隔离,不影响本地开发数据。
不复杂但容易忽略











