数据库 (database/database.sqlite) 不存在。数据库来自 artisan tinker
Database (database/database.sqlite) does not exist. Database works from artisan tinker
我在 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 tinker
和 DB::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'))
,returns database/database.sqlite
不是我的绝对路径。
您需要使用完整路径,例如:
DB_DATABASE=/home/laravel-project/database/database.sqlite
我运行以下命令:
php artisan config:cache
php artisan config:clear
php artisan serve
- 重新启动服务器
如果您从 .env
文件中删除 DB_DATABASE=...
并使用 config/database.php
中的路径:
'database' => env('DB_DATABASE', database_path('database.sqlite')),...
(如果您的 database.sqlite
文件在 database/
文件夹中),它也可以工作。
在config/database.php 文件中:
'sqlite' => [
'driver' => 'sqlite',
'database' => dirname(__DIR__).'/database/database.sqlite',
],
然后 运行 以下命令:
php artisan config:cache
php artisan config:clear
我认为,这里的问题是因为 Homestead。
database.sqlite 文件在本地机器上的绝对路径与虚拟机的路径不同。
在我的例子中,必须设置:
DB_DATABASE=/home/vagrant/code/database/database.sqlite
或者,您可以只注释掉这一行就可以开始了。
#DB_DATABASE=
因为 sqlite 只需要 DB_CONNECTION=.env 文件中的 sqlite,所以你只需删除另一个:
DB_HOST
DB_PORT
DB_DATABASE
DB_USERNAME
DB_PASSWORD
然后保存并再次 运行 迁移。这就是我解决问题的方法。干杯!
从您的 C: 目录转到 PHP 文件夹并打开文件 php.ini。
从那里找到 extension=pdo_sqlite
并删除 ;
如评论中Chris所说,主要解决办法是完全删除 DB_DATABASE
.env文件(其实只有第一个需要以下代码行)。
DB_CONNECTION=sqlite
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USERNAME=admin
DB_PASSWORD=
对于Windows,您需要像这样设置路径
DB_DATABASE="C:\xampp\htdocs\project\data\database.db"
我在 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 tinker
和 DB::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'))
,returns database/database.sqlite
不是我的绝对路径。
您需要使用完整路径,例如:
DB_DATABASE=/home/laravel-project/database/database.sqlite
我运行以下命令:
php artisan config:cache
php artisan config:clear
php artisan serve
- 重新启动服务器
如果您从 .env
文件中删除 DB_DATABASE=...
并使用 config/database.php
中的路径:
'database' => env('DB_DATABASE', database_path('database.sqlite')),...
(如果您的 database.sqlite
文件在 database/
文件夹中),它也可以工作。
在config/database.php 文件中:
'sqlite' => [
'driver' => 'sqlite',
'database' => dirname(__DIR__).'/database/database.sqlite',
],
然后 运行 以下命令:
php artisan config:cache
php artisan config:clear
我认为,这里的问题是因为 Homestead。 database.sqlite 文件在本地机器上的绝对路径与虚拟机的路径不同。
在我的例子中,必须设置:
DB_DATABASE=/home/vagrant/code/database/database.sqlite
或者,您可以只注释掉这一行就可以开始了。
#DB_DATABASE=
因为 sqlite 只需要 DB_CONNECTION=.env 文件中的 sqlite,所以你只需删除另一个:
DB_HOST
DB_PORT
DB_DATABASE
DB_USERNAME
DB_PASSWORD
然后保存并再次 运行 迁移。这就是我解决问题的方法。干杯!
从您的 C: 目录转到 PHP 文件夹并打开文件 php.ini。
从那里找到 extension=pdo_sqlite
并删除 ;
如评论中Chris所说,主要解决办法是完全删除 DB_DATABASE
.env文件(其实只有第一个需要以下代码行)。
DB_CONNECTION=sqlite
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USERNAME=admin
DB_PASSWORD=
对于Windows,您需要像这样设置路径
DB_DATABASE="C:\xampp\htdocs\project\data\database.db"