我尝试在我的 laravel 项目中,在本地开发环境(带有 AMMPS 的 Windows 8.1)中使用 sqlite 数据库,但是当我尝试运行
migrate:instal
命令时,出现此错误:
[PDO异常] SQLSTATE[HY000] [14] 无法打开数据库文件
我的数据库配置文件(app/config/local/database.php):
<?php
return array(
'default' => 'sqlite',
'connections' => array(
'sqlite' => array(
'driver' => 'sqlite',
'database' => __DIR__ . '\..\..\database\production.sqlite',
'prefix' => '',
),
),
);
尝试删除 .env 文件中的 DB_DATABASE="yourdatabase" 变量
如果权限允许在文件夹上写入,则只需创建存储文件夹。
e-g,这就是我解决问题的方法。
在
config/database.php
:
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'database' => storage_path('database/databaseName.sqlite'),
'prefix' => '',
],
然后,如果您在终端上运行
php artisan migrate
,它会返回您 [PDOException] SQLSTATE[HY000] [14] unable to open database file
自己创建路径文件夹,例如在终端中
mkdir storage/database/databaseName.sqlite
确保权限允许您写入,然后重新运行命令
php artisan migrate
,它会返回成功消息:Migration table created successfully
。
在 Laravel 5.3.x 上
这是唯一对我有用的东西:
将 DB_CONNECTION 从“mysql”更改为“sqlite”。因为这是一个 sqlite 数据库,您可以删除该 .env 中的所有其他 DB_* 项目 文件。
APP_ENV=本地 APP_KEY=base64: APP_DEBUG=true APP_LOG_LEVEL=调试 APP_URL=http://localhost
DB_CONNECTION=sqlite
您只需要在定义的路径中提供 sqlite 文件即可。在larvel 5.7中,我只是使用以下命令并运行迁移。
touch /absolute/path/of/db.sqlite
这将在定义的位置创建一个空文件,您就可以开始了。
观察:在 Larvel 5.7 中,.sqlite 文件应该已经在定义的位置可用。
对于 Windows,右键单击并在定义位置创建具有定义名称的新文件。
尝试将文件
databaseName.sqlite
权限数据库更改为可写和可读。也许还可以更改文件夹的权限database
。
在生产服务器中,将此文件数据库更改为私有目录以确保安全。
好吧,可能已经晚了,但我也曾在
ubuntu
环境中遇到过这个问题,这就是我如何克服这个问题的。
您必须将完全限定的
sqlite
文件路径传递给 .env
文件,如下所示:
DB_CONNECTION=sqlite
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE="/var/www/html/my-awesome-project/database/database.sqlite"
DB_USERNAME=homestead
DB_PASSWORD=secret
此处将
DB_DATABASE
键的值更改为计算机文件系统中 sqlite
文件的确切位置。
温馨提示: 您可以通过添加
来找到
sqlite
文件的数据库路径
dd(database_path('database.sqlite'));
这行代码位于
config/database.php
文件顶部,然后运行 php artisan migrate
到终端。您可以从那里找到确切的位置,复制它并将其放入.env
s DB_DATABASE
键。
测试前不要忘记重新启动 Laravel 服务器并删除
dd(database_path('database.sqlite'));
表单 database.php
。
就我而言,将
url: '%env(DATABASE_AUTH_URL)%'
更改为 url: '%env(resolve:AUTH_DATABASE_URL)%'
解决了问题
至少,您必须设置 SQLite 数据库文件的正确路径。
为了缓解 .env 文件中的设置与 config 文件夹中的database.php 文件之间的冲突,只需在database.php 文件中设置数据库文件路径并将其从.env 文件中删除即可。 .env 文件只需写入您的连接并删除其他数据库属性。
DB_CONNECTION=sqlite
第二次打开 config/database.php 转到连接数组并将数据库路径更改为您的数据库文件路径database_path('您的数据库文件路径')
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'url' => env('DATABASE_URL'),
'database' => database_path('mydb.sqlite'),
'prefix' => '',
'foreign_key_constraints' => env('DB_FOREIGN_KEYS', false),
],
请检查数据库文件所在目录的权限。
chmod 777 YOU_APP/database
将
DB_CONNECTION
从“mysql”更改为“sqlite”。
因为这是一个 sqlite 数据库,所以您可以删除该 DB_*
文件中的所有其他 .env
项目。
APP_ENV=local
APP_KEY=base64:
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost
DB_CONNECTION=sqlite