迁移期间 Laravel 未知数据库错误

Posted

技术标签:

【中文标题】迁移期间 Laravel 未知数据库错误【英文标题】:Laravel unknown database error during migration 【发布时间】:2019-11-18 10:23:42 【问题描述】:

我无法在 Homestead/Vagrant 盒子中运行 Laravel 迁移。这样的问题还有很多,但似乎没有一个适合我的答案。

我建立了一个博客网站,它在 VirtualBox 中的路径是/home/vagrant/code/blog。然后我按照docs 中的说明在/home/vagrant/code/blog/database/database.sqlite 创建了一个代表SQLite 数据库的空文件。此外,我编辑了/home/vagrant/code/blog/.env 文件以包含“正确”的数据库信息:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=/home/vagrant/code/blog/database/database.sqlite
DB_USERNAME=homestead
DB_PASSWORD=secret

然后我使用php artisan make:migration create_users_table 创建了一个迁移,正如here 所解释的那样。但是当我尝试使用 php artisan migrate, 应用此迁移时,我收到以下错误:

vagrant@homestead:~/code/blog$ php artisan migrate

   Illuminate\Database\QueryException  : SQLSTATE[HY000] [1049] Unknown database '/home/vagrant/code/blog/database/database.sqlite' (SQL: select * from information_schema.tables where table_schema = /home/vagrant/code/blog/database/database.sqlite and table_name = migrations and table_type = 'BASE TABLE')

  at /home/vagrant/code/blog/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664
    660|         // If an exception occurs when attempting to run a query, we'll format the error
    661|         // message to include the bindings with SQL, which will make this exception a
    662|         // lot more helpful to the developer instead of just the database's errors.
    663|         catch (Exception $e) 
  > 664|             throw new QueryException(
    665|                 $query, $this->prepareBindings($bindings), $e
    666|             );
    667|         
    668| 

  Exception trace:

  1   PDOException::("SQLSTATE[HY000] [1049] Unknown database '/home/vagrant/code/blog/database/database.sqlite'")
      /home/vagrant/code/blog/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  2   PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=/home/vagrant/code/blog/database/database.sqlite", "homestead", "secret", [])
      /home/vagrant/code/blog/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  Please use the argument -v to see more details.

所以它说即使我输入了它的绝对路径它也找不到数据库,这怎么可能?我知道路径必须正确,因为当我运行 ls /home/vagrant/code/blog/database/database.sqlite 时,它被列为现有文件..

我该如何解决这个问题?

【问题讨论】:

您必须将 DB_CONNECTION 变量从 mysql 更改为 SQLite 按照 Giacomo 的说法,你应该改变你的环境文件。如果您阅读异常消息,您的应用正在尝试连接到 MySQL 中名为“/home/vagrant/code/blog/database/database.sqlite”的数据库 但这会导致错误InvalidArgumentException : Database [SQLite] not configured. 【参考方案1】:

改变这个:

DB_CONNECTION=mysql

有了这个:

DB_CONNECTION=SQLite

在您的 .env 文件中

【讨论】:

这会导致错误InvalidArgumentException : Database [SQlite] not configured.【参考方案2】:

如果您从 .env 文件中删除 DB_DATABASE 并使用 config/database.php 中的默认值会发生什么

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

【讨论】:

然后我得到错误Illuminate\Database\QueryException : SQLSTATE[HY000] [1049] Unknown database 'database.sqlite'【参考方案3】:

首先,您需要更改默认数据库驱动程序,该驱动程序当前设置为mysql,即DB_CONNECTION=SQLite。请将其替换为DB_CONNECTION=SQLite。并确认database.sqlite 文件存在于路径/home/vagrant/code/blog/database/database.sqlite

【讨论】:

如果我进行更改,我会收到错误InvalidArgumentException : Database [SQLite] not configured. 此外,正如问题中所说,我通过使用ls 确认了 database.sqlite 文件的存在,这表明它就是这样准确的位置。 请改用DB_CONNECTION=sqlite。并使用php artisan config:clear 清除缓存。【参考方案4】:

你很可能在你的电脑上运行两个mysql实例,这是我的情况,使用终端创建一个数据库,你使用的细节应该是你应该使用的。

【讨论】:

以上是关于迁移期间 Laravel 未知数据库错误的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 迁移未知数据库 [1049]

请求 Laravel 迁移未知数据库枚举

SQLSTATE[HY000]:一般错误:在 Laravel 中迁移期间出现 1005

安装迁移期间mysql服务器已消失错误(laravel)

Laravel 迁移抛出外键异常

尝试迁移Laravel数据库时出错