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

时间:2019-07-08 21:30:12

标签: php mysql database laravel migration

我无法在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时,它被列为现有文件。

我该如何解决?

4 个答案:

答案 0 :(得分:2)

更改此:

DB_CONNECTION=mysql

与此:

DB_CONNECTION=SQLite

在您的.env文件中

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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