我正在尝试检查Laravel中的数据库是否已连接。
我查看了文档,但没有找到相关信息。最接近的是这个,但这并不能解决我的问题。
我有三个MySQL实例,分别安装在不同的机器上。以下是我尝试实现的简化版本。
- 如果连接了数据库1,则将数据保存到它
- 如果未连接到数据库1,则检查是否连接到数据库2
- 如果连接了数据库2,则将数据保存到它
- 如果未连接到数据库2,则检查是否连接到数据库3
- 如果连接了数据库3,则将数据保存到它
明确一下,在Laravel 5.1中有没有一种方法可以检查数据库是否已连接?
我正在尝试检查Laravel中的数据库是否已连接。
我查看了文档,但没有找到相关信息。最接近的是这个,但这并不能解决我的问题。
我有三个MySQL实例,分别安装在不同的机器上。以下是我尝试实现的简化版本。
明确一下,在Laravel 5.1中有没有一种方法可以检查数据库是否已连接?
尝试获取底层PDO实例。如果失败,那么Laravel无法连接到数据库!
use Illuminate\Support\Facades\DB;
// Test database connection
try {
DB::connection()->getPdo();
} catch (\Exception $e) {
die("Could not connect to the database. Please check your configuration. error:" . $e );
}
你可以使用alexw的解决方案,并通过Artisan运行以下命令。
php artisan tinker
DB::connection()->getPdo();
如果连接正常,您应该会在响应的末尾看到
CONNECTION_STATUS: "Connection OK; waiting to send.",
附近。
php artisan tinker
DB:connection()
可以针对 vendor/laravel/framework/src/Illuminate/Database/Connection.php
类中的任何 API 公共端点进行定位,特别是 getConfig()
,这非常方便,可以获取连接到 DB 的详细信息,允许您从所选客户端手动尝试该连接。 - Fabien Haddadi您可以在控制器方法或路由的内联函数中使用此功能:
use Illuminate\Support\Facades\DB;
//....
try {
DB::connection()->getPdo();
if(DB::connection()->getDatabaseName()){
echo "Yes! Successfully connected to the DB: " . DB::connection()->getDatabaseName();
}else{
die("Could not find the database. Please check your configuration.");
}
} catch (\Exception $e) {
die("Could not open connection to database server. Please check your configuration.");
}
->getDatabaseName()
部分,因为 ->getPdo()
已经会抛出错误(如果我错了,我很乐意知道)。 - giovannipds您也可以运行此命令:
php artisan migrate:status
它建立一个数据库连接以从迁移表中获取迁移。如果连接失败,它将抛出一个异常。
您可以在Laravel中使用此查询来检查数据库连接:
use Illuminate\Support\Facades\DB;
// ...
$pdo = DB::connection()->getPdo();
if($pdo)
{
echo "Connected successfully to database ".DB::connection()->getDatabaseName();
} else {
echo "You are not connected to database";
}
如果需要更多信息,您可以查看这个页面https://laravel.com/docs/5.0/database。
if(DB::connection()->getDatabaseName())
,但在评论反馈之后,答案已更新为使用 DB::connection()->getPdo()
。 - Daryn我不知道这是否适用于laravel的那个版本,但至少在更新的版本中,你可以运行以下命令:
php artisan db
如果您的应用程序可以访问数据库,则应该看到与之对应的CLI REPL,对于PostgreSQL,您将看到一个psql实例。
php artisan db:show
。 - Dorian Massoulier当Laravel尝试连接数据库时,如果连接失败或发现任何错误,它将返回一个PDOException
错误。我们可以捕获此错误并重定向操作。
在app/filters.php
文件中添加以下代码。
App::error(function(PDOException $exception)
{
Log::error("Error connecting to database: ".$exception->getMessage());
return "Error connecting to database";
});
希望这对你有所帮助。