数据库 (database/database.sqlite) 不存在。工匠修补匠的数据库作品

Posted

技术标签:

【中文标题】数据库 (database/database.sqlite) 不存在。工匠修补匠的数据库作品【英文标题】:Database (database/database.sqlite) does not exist. Database works from artisan tinker 【发布时间】:2017-08-25 17:27:14 【问题描述】:

我在 database 文件夹中创建了我的 database.sqlite 文件。我的.env 文件内容是:

DB_CONNECTION=sqlite
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=absolute\path\to\database\database.sqlite
DB_USERNAME=admin
DB_PASSWORD=

当我运行php artisan tinkerDB::table('users')->get(); 时,我从数据库中获取信息。

我的数据库控制器是:

class DatabaseController extends Controller

    public function main()
    
        $users = DB::table('users')->get();

        return view('database',compact($users));
    

然而,当我请求 /database 路径时,我得到了错误:

QueryException in Connection.php line 647: Database (database/database.sqlite) does not exist. (SQL: select * from "users")

更新: 临时解决方法是更改​​ config 文件夹中的 database.php:

  'connections' => [

    'sqlite' => [
        'driver' => 'sqlite',
        'database' => 'absolute\path\database\database.sqlite', 
        'prefix' => '',
    ],

而不是使用env('DB_DATABASE', database_path('database.sqlite')),它返回database/database.sqlite而不是我的绝对路径。

【问题讨论】:

你的服务器是如何运行的? php artisan serve 还是 apache/nginx 使用.env中文件的绝对路径 嘿,我的解决方案是从我的 .env 中完全删除 DB_DATABASE 条目。这样,它默认使用正确允许我的应用程序与数据库交互的 database_path() 函数。 @chris 它在 Laravel 5.7 版中对我有用,tnx 【参考方案1】:

您需要使用完整路径,例如:

DB_DATABASE=/home/laravel-project/database/database.sqlite

【讨论】:

更简单的方法是使用“../database/database.sqlite” mac 和 linux 都是这样,但是 windows 呢? @wafi 在 Laravel 7.3 中,写入 "../database/database.sqlite" 可用于迁移,但在尝试登录/注册时,找不到数据库。恢复到database/database.sqlite就找到了,但是之后php artisan migrate就找不到了,所以全路径的解决方案是好的。 @TuGordoBello for windows 使用完整路径替换单反斜杠双反斜杠 \\.例如:DB_DATABASE=C:\\Project_Folder\\database\\database.sqlite【参考方案2】:

如果您从.env 文件中删除DB_DATABASE=... 并使用config/database.php 中的路径:

'database' => env('DB_DATABASE', database_path('database.sqlite')),...

(如果您的database.sqlite 文件位于database/ 文件夹中),它也可以工作。

【讨论】:

【参考方案3】:

我运行了以下命令:

php artisan config:cache

php artisan config:clear

php artisan serve - 重启服务器

【讨论】:

如果即使在一切都配置好之后也没有任何效果,这是最好的解决方案。你也可以试试 'php artisan route:clear' 和 'php artisan optimize'【参考方案4】:

在 config/database.php 文件中:

'sqlite' => [
              'driver' => 'sqlite',
              'database' => dirname(__DIR__).'/database/database.sqlite',
            ],

然后运行以下命令:

php artisan config:cache
php artisan config:clear

【讨论】:

为我工作,谢谢! 这也是我的解决方案。请对此提供一点解释。【参考方案5】:

对于那些仍然面临这个问题的人:https://laracasts.com/discuss/channels/general-discussion/database-databasedatabasesqlite-does-not-exist-error-on-running?page=1

由于 sqlite 只需要 DB_CONNECTION=sqlite 在 .env 文件中,因此您只需删除另一个:

DB_HOST
DB_PORT
DB_DATABASE
DB_USERNAME
DB_PASSWORD

然后保存并再次运行迁移。这就是我解决问题的方法。干杯!

【讨论】:

【参考方案6】:

正如Chris在cmets中所说,主要的解决方案是从.env文件中完全删除DB_DATABASE(其实只需要下面代码的第一行)。

DB_CONNECTION=sqlite
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USERNAME=admin
DB_PASSWORD=

【讨论】:

【参考方案7】:

我认为,这里的问题是由于 Homestead。 本地机上database.sqlite文件的绝对路径与虚拟机上的不一样。

在我的情况下 a 必须设置:

DB_DATABASE=/home/vagrant/code/database/database.sqlite

或者,您可以将这一行注释掉,然后就可以开始了。

#DB_DATABASE=

【讨论】:

【参考方案8】:

对于 Windows,您需要像这样设置路径

DB_DATABASE="C:\\xampp\\htdocs\\project\\data\\database.db"

【讨论】:

【参考方案9】:

从 C: 目录转到 PHP 文件夹并打开文件 php.ini。 从那里找到extension=pdo_sqlite 并删除;

【讨论】:

以上是关于数据库 (database/database.sqlite) 不存在。工匠修补匠的数据库作品的主要内容,如果未能解决你的问题,请参考以下文章

数据库类型——系统数据库/用户数据库

关系型数据库与文档型数据库的差别?

数据库数据库管理系统数据库系统

mysql数据库的基本操作:创建数据库查看数据库修改数据库删除数据库

如何清理mysql数据库缓存数据?

JDBC访问数据库的步骤