Laravel【1049】未知数据库错误

3
我是新手学习Laravel,但是我在尝试通过控制器查看数据库时遇到了问题。当我使用控制器来查看我的数据时,我会收到以下错误信息:“SQLSTATE[HY000] [1049] Unknown database 'laravel'”。如果我使用artisan tinker,我可以使用::all()命令查看我的数据,并已成功迁移数据。但由于某种原因,它似乎不喜欢我的视图。我查阅了其他类似的答案,并建议运行“php artisan cache:clear”,但这对我没有任何作用。下面是我的控制器:
class authorsController extends Controller
{

    public function index(){
        $authorList = \App\Author::all();
        //return $authors;
        return view('library.authors');
    }
}

在 .env 文件中

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=library
DB_USERNAME=root
DB_PASSWORD=

1
请运行 php artisan tinker 并执行 config('database')。检查它是否选择了正确的值 - 特别是 default 值和 mysql.database 值。 - ceejayoz
请检查config/database.php中的值。如果您有(并且正在使用)多个连接,则其中一个可能未配置为将library作为您的数据库使用。检查env('...', 'laravel');某些内容可能正在使用默认值而不是DB_DATABASE - Tim Lewis
@ceejayoz 我查看了 config('database'),它显示所有数据库都是正确的。 - Paul Carlson
@PaulCarlson 如果你确定了这一点,那么请检查 app/Author.php 是否设置了 $connection 值。 - ceejayoz
1
@TimLewis,我查看了config/database.php文件,一切看起来都很好。我甚至搜索了“laravel”,除了注释之外没有找到任何内容。我还查看了我的.env文件,数据库名称也是正确的。 - Paul Carlson
奇怪...而且 env('DB_DATABASE', 'forge') 的默认值不是 laravel,所以这个想法也有些牵强附会了。你说你可以使用 php artisan tinker 无障碍地查看 \App\Author::all() 的内容,那是否在加载 library.authors 时有一些可能拥有自己的配置与你定义的不同的中间件?或者访问该路由时使用了一些中间件吗? - Tim Lewis
4个回答

7
如果您使用php artisan serve在Laravel中运行,它不会在您停止和重新启动服务器之前获取.env更改。
可能您在服务器启动时将"laravel"设置为了您的数据库名称。请停止它然后再次运行该命令。

这就是问题所在。我没有想到在修改后重新启动服务器。感谢明显的答案。 - Paul Carlson

3
尝试使用以下命令清单:

php artisan cache:clear
php artisan view:clear
php artisan route:clear
php artisan clear-compiled
php artisan config:cache

在您的路由文件web.php中加入以下代码,并在浏览器中运行,即可判断数据库是否连接成功。最初的回答已经包含了该代码。
Route::get('/testConnection', function () {
try {
      DB::connection()->getPdo();
      if(DB::connection()->getDatabaseName()){
          echo "Yes! Successfully connected to the DB: " . DB::connection()->getDatabaseName();
          die;
      }else{
          die("Could not find the database. Please check your configuration.");
      }
  } catch (\Exception $e) {
      die($e->GetMessage());
  }
});

希望这能帮到你。最初的回答是:

希望这能帮到你。


谢谢您的建议,但它仍然显示我正在使用错误的数据库。它仍然给出“SQLSTATE [HY000] [1049]未知数据库'laravel”。您知道数据库信息的路径吗?例如,我知道我在.env中声明它,然后在config.database.php中读取它。我是否错过了中间或之后的步骤? - Paul Carlson
@Paul Carlson 我的建议是创建一个名为 laravel 的新数据库,然后检查错误是否已经消失。 - Chintan Kotadiya

0

我不确定为什么会这样,但我找到了一个解决方法。在config.database.php文件中,我将'database' => env('DB_DATABASE', 'forge')更改为'database' => env('library', 'library')。我觉得我不应该改变它们,但出于某种原因,这样纠正了问题。

这让我想到可能与.env文件有关,但我不确定。我将不得不开始一个新项目来验证它是否不是我的系统上的奇怪问题。


这真的很奇怪。但是,除非您在.env文件中有一个条目library=library,否则env('library', 'library');只是默认为library,因此您可以有效地将'database' => library'放入其中。不过,很高兴您已经解决了问题! - Tim Lewis
config/database.php 中的默认值实际上指向 .env 文件中的值。例如:'database' => env('DB_DATABASE', 'forge')DB_DATABASE 是一个不应该被更改的键。它引用了 .env 文件中提到的键。方法 env() 用于从 .env 文件中检索值。在此处阅读有关 env() 的更多信息: https://laravel.com/docs/5.8/helpers#method-env - Maya Kathrine Andersen

0

我尝试使用php artisan config:clear和php artisan cache:clear。我创建了数据库,也删除并重新创建了它几次。我甚至尝试通过更改.env中的DB_DATABASE值来使用现有的数据库,我可以通过CLI连接到新的和现有的数据库。在php -m中我看到了驱动程序。所以解决Windows 10上的问题是将DB_HOST=127.0.0.1更改为DB_HOST=localhost,然后再次清除config/cache即可解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接