远程 MySQL 数据库连接 Laravel 5 不工作
Remote MySQL database connection Laravel 5 not working
我正在使用 laravel 5。我需要从远程 MySQL 数据库获取一些数据。
我已经在 config/database.php 中设置了我的数据库连接。
这是它的样子:
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
'remotemysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '************'),
'database' => env('DB_DATABASE', 'osys'),
'username' => env('DB_USERNAME', 'Syn'),
'password' => env('DB_PASSWORD', '****************'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
],
连接信息正确,我已经测试过了,可以连接到远程数据库。
为了测试它,我刚刚获取了数据库连接和控制器中的数据,将其发送到视图以检查是否一切正常。这是我的控制器:
...
use DB;
...
public function item()
{
$items = DB::connection('remotemysql')
->table('ip_products')
->get();
return view('admin.item', compact('items'));
}
这是我的观点:
...
<tbody>
@foreach ($items as $item)
<tr>
<td>{{$item->id}}</td>
</tr>
@endforeach
</tbody>
...
当我尝试加载我的视图时,我收到此错误消息:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'dvs.ip_products' >doesn't exist (SQL: select * from ip_products
)
错误告诉我 Laravel 试图从 dvs 数据库(这是主站点数据库)获取 table。所以它没有使用连接 'remotemysql'。如果它无法连接到远程数据库,则会出现连接错误,但我认为它根本没有使用远程连接。
我该怎么做才能解决这个问题?
从错误中可以看出:
Table 'dvs.ip_products' >doesn't exist
其中 dvs
是数据库名称。
所以根据您的配置文件:
'remotemysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '************'),
'database' => env('DB_DATABASE', 'osys'),
'username' => env('DB_USERNAME', 'Syn'),
'password' => env('DB_PASSWORD', '****************'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
env()
方法有 2 个参数:$key, $default
所以它首先查找 .env
文件以在您的案例 DB_HOST, DB_DATABASE...
中找到 $key
,如果未定义,将使用您定义的 $default
作为第二个参数。
你可以阅读它here
我正在使用 laravel 5。我需要从远程 MySQL 数据库获取一些数据。
我已经在 config/database.php 中设置了我的数据库连接。 这是它的样子:
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
'remotemysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '************'),
'database' => env('DB_DATABASE', 'osys'),
'username' => env('DB_USERNAME', 'Syn'),
'password' => env('DB_PASSWORD', '****************'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
],
连接信息正确,我已经测试过了,可以连接到远程数据库。
为了测试它,我刚刚获取了数据库连接和控制器中的数据,将其发送到视图以检查是否一切正常。这是我的控制器:
...
use DB;
...
public function item()
{
$items = DB::connection('remotemysql')
->table('ip_products')
->get();
return view('admin.item', compact('items'));
}
这是我的观点:
...
<tbody>
@foreach ($items as $item)
<tr>
<td>{{$item->id}}</td>
</tr>
@endforeach
</tbody>
...
当我尝试加载我的视图时,我收到此错误消息:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'dvs.ip_products' >doesn't exist (SQL: select * from
ip_products
)
错误告诉我 Laravel 试图从 dvs 数据库(这是主站点数据库)获取 table。所以它没有使用连接 'remotemysql'。如果它无法连接到远程数据库,则会出现连接错误,但我认为它根本没有使用远程连接。
我该怎么做才能解决这个问题?
从错误中可以看出:
Table 'dvs.ip_products' >doesn't exist
其中 dvs
是数据库名称。
所以根据您的配置文件:
'remotemysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '************'),
'database' => env('DB_DATABASE', 'osys'),
'username' => env('DB_USERNAME', 'Syn'),
'password' => env('DB_PASSWORD', '****************'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
env()
方法有 2 个参数:$key, $default
所以它首先查找 .env
文件以在您的案例 DB_HOST, DB_DATABASE...
中找到 $key
,如果未定义,将使用您定义的 $default
作为第二个参数。
你可以阅读它here