Ale*_*mia 17 sqlite laravel-5 laravel-5.1 laravel-5.2
每当我运行时php artisan migrate,控制台中都会显示以下错误:
[PDOException]
SQLSTATE [HY000] [14]无法打开数据库文件
该database.sqlite文件位于数据库/.我正在运行Windows 10,Laravel 5.2.这是.env文件配置:
DB_CONNECTION=sqlite
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=homestead
DB_PASSWORD=secret
Run Code Online (Sandbox Code Playgroud)
我到处寻找,但找不到导致此错误的原因以及解决方法.
我设法使迁移更换成功运行DB_DATABASE=database与DB_DATABASE=database/database.sqlite在.ENV文件.但是,每当我尝试从数据库中检索项时,都会发生新错误:
public function index()
{
// cause of the error
$cards = Card::all();
return view('cards.index', compact('cards'));
}
Run Code Online (Sandbox Code Playgroud)
以上操作会引发以下错误:
SQLiteConnector.php第34行中的InvalidArgumentException:
数据库(database/database.sqlite)不存在.
奇怪的是,该命令Card::all()在php artisan tinker模式下完美无缺.这有什么神奇之处?
无论如何,我也发现了那条线:
'database' => env('DB_DATABASE', database_path('database.sqlite')),
Run Code Online (Sandbox Code Playgroud)
在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'
Run Code Online (Sandbox Code Playgroud)
如您所见,它们的输出不同,第二个是预期的.这是一个Laravel漏洞吗?还是我误解了什么?
Ale*_*mia 17
虽然没有回答这个问题,但修复"未找到数据库"问题的方法是替换database.php中的以下行:
'database' => env('DB_DATABASE', database_path('database.sqlite')),
Run Code Online (Sandbox Code Playgroud)
同
'database' => database_path('database.sqlite'),
Run Code Online (Sandbox Code Playgroud)
mot*_*tia 15
.env文件应包含以下内容:
DB_DATABASE = .. \数据库\ database.sqlite
通过一些测试,您可以验证DB_DATABASE中包含的链接是否与"公共"目录相关(至少在我的Windows机器上).这就是为什么我们应该在你的链接之前介绍.. \.
当然,使用绝对链接也应该这样做
DB_DATABASE = d:\ WWW \项目\数据库\ database.sqlite
正如@Josh建议的那样
.env文件应包含以下内容:
DB_DATABASE=database\database.sqlite
Run Code Online (Sandbox Code Playgroud)
通过一些测试,您可以验证DB_DATABASE中包含的链接是否与"公共"目录相关(至少在我的Windows机器上).这就是为什么我们应该在你的链接之前介绍.. \.
当然,使用绝对链接也应该这样做
'database' => env('DB_DATABASE/..', database_path('database.sqlite')),
Run Code Online (Sandbox Code Playgroud)
正如@Josh建议的那样
通过使用相对路径,迁移将失败,因为它们使用项目目录作为根目录...
为了纠正一切,我建议设置:
DB_DATABASE=..\database\database.sqlite
Run Code Online (Sandbox Code Playgroud)
并调整config/database.php中的sqlite连接,如下所示:
DB_DATABASE=D:\www\project\database\database.sqlite
Run Code Online (Sandbox Code Playgroud)
创建database.sqlite在此文件夹中调用的文件作为database/database.sqlite
打开.env文件并将 MySQL 更改为 SQLite
使用“#”注释密码和用户名和数据库名称
运行php artisan migrate享受
env 文件是这样的:
DB_CONNECTION=sqlite
#DB_HOST=127.0.0.1
#DB_PORT=3306
#DB_DATABASE=database
#DB_USERNAME=homestead
#DB_PASSWORD=secret
Run Code Online (Sandbox Code Playgroud)
小智 6
我们的朋友@ alexander-lomia补充了芒果
更改:
'database' => env('DB_DATABASE', database_path('database.sqlite'))
Run Code Online (Sandbox Code Playgroud)
至:
'database' => database_path(env('DB_DATABASE'))
Run Code Online (Sandbox Code Playgroud)
在database.php中
:)
| 归档时间: |
|
| 查看次数: |
15522 次 |
| 最近记录: |