sqlite - 如何让 SQLite 在 Laravel 中工作

标签 sqlite laravel-5 laravel-5.1 laravel-5.2

每当我运行 php artisan migrate 时,控制台中都会显示以下错误:

[PDOException]
SQLSTATE[HY000] [14] unable to open database file

database.sqlite 文件位于database/。我正在运行 Windows 10Laravel 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/

相关文章:

Android SQLite核心功能

android - 错误: no such column

php - Laravel 上的多个位置不工作

laravel - 升级到 Laravel 5.2 会使所有 session 失效

php - Laravel 5.1 测试 - 从数据库获取行以完成测试

php - 无法在 Laravel 5.1 中每周获取数据

sqlite - 表更新时出现SQL语法错误

java - SQLite 卡在 SQLite.trampoline() 方法上

laravel - Eloquent ORM 选择带有限制和列名的所有内容

database - 错误 : field is required