迁移期间 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 未知数据库错误的主要内容,如果未能解决你的问题,请参考以下文章