每当我运行 php artisan migrate
时,控制台中都会显示以下错误:
[PDOException]
SQLSTATE[HY000] [14] unable to open database file
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'));
}
以上操作抛出以下错误:
InvalidArgumentException in SQLiteConnector.php line 34:
Database (database/database.sqlite) does not exist.
奇怪的是,命令 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 错误吗?还是我误解了什么?
最佳答案
简短的解决方案
虽然没有回答这个问题,但解决“未找到数据库”问题的方法是替换 database.php 中的以下行:
'database' => env('DB_DATABASE', database_path('database.sqlite')),
与
'database' => database_path('database.sqlite'),
关于sqlite - 如何让 SQLite 在 Laravel 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36373835/