【发布时间】:2022-03-15 04:21:59
【问题描述】:
每当我运行php artisan migrate 时,控制台中都会显示以下错误:
[PDO异常]
SQLSTATE[HY000] [14] 无法打开数据库文件
database.sqlite 文件位于 database/。我正在运行 Windows 10、Laravel 5.2。这是 .env 文件配置:
.env:
DB_CONNECTION=sqlite
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=homestead
DB_PASSWORD=secret
我到处寻找,但找不到导致此错误的原因以及解决方法。
更新
我设法通过在 .env 文件中将 DB_DATABASE=database 替换为 DB_DATABASE=database/database.sqlite 来成功运行迁移。但是,每当我尝试从数据库中检索项目时,都会出现新错误:
public function index()
{
// cause of the error
$cards = Card::all();
return view('cards.index', compact('cards'));
}
上述动作抛出以下错误:
SQLiteConnector.php 第 34 行中的 InvalidArgumentException:
数据库(database/database.sqlite)不存在。
奇怪的是,Card::all() 命令在php artisan tinker 模式下完美运行。这是什么魔法?
不管怎样,我也发现了,那一行:
'database' => env('DB_DATABASE', database_path('database.sqlite')),
在 database.php 文件中只需替换为 database_path('database.sqlite') 并且 一切都开始正常工作。
看来,问题的根源在于env('DB_DATABASE') 调用。我去了 SQLiteConnector.php 文件并转储了env('DB_DATABASE') 和database_path('database.sqlite') 的输出。以下是它们的输出:
dd(env('DB_DATABASE')) // => 'database/database.sqlite'
dd(database_path('database.sqlite')) // => 'D:\www\project\database\database.sqlite'
如您所见,它们的输出不同,而第二个是预期的。这是一个 Laravel 错误吗?还是我误会了什么?
【问题讨论】:
-
@downvoter 请解释下票!我不明白我做错了什么
-
我不知道谁投了反对票但有效的问题,你得到了我的投票。
-
用以下内容替换 config/database.php 中的 'database' 行以使用相对路径:'database' => database_path(env('DB_DATABASE', 'database.sqlite')),
标签: sqlite laravel-5 laravel-5.1 laravel-5.2