远程MySQL数据库连接Laravel 5无法正常工作

时间:2016-11-28 10:46:19

标签: php mysql database laravel-5 remote-access

我正在使用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]:未找到基表或视图:1146表'dvs.ip_products'&gt;不存在(SQL:select * from ip_products

错误告诉我Laravel试图从dvs数据库(主要的站点数据库)获取表格。所以它没有使用连接'remotemysql'。如果它无法连接到远程数据库,则会出现连接错误,但我认为它根本不使用远程连接。

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:1)

正如您从错误中看到的那样:

  

表&#39; dvs.ip_products&#39; &gt;不存在

其中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文件以查找{case} $key中的DB_HOST, DB_DATABASE...,如果未定义,则会使用您定义为{2}的$default参数。

您可以阅读here