【问题标题】:Remote MySQL database connection Laravel 5 not working远程 MySQL 数据库连接 Laravel 5 不起作用
【发布时间】:2016-11-28 10:46:19
【问题描述】:

我正在使用 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' >不存在(SQL: select * from ip_products

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

我可以做些什么来解决这个问题?

【问题讨论】:

  • 查看您的应用根文件夹中的.env 文件 (:
  • .env 文件中的内容将始终覆盖您的配置。
  • @Taacoo 因此,如果我从 .env 中删除凭据并将其放入 database.php 中,它应该可以工作吗?我不会破坏它吗? :P
  • @Pieter-Jan 它将被env() 函数的第二个参数覆盖
  • @Pieter-Jan 检查给出的答案。如果您清空环境变量。或者将配置数据添加到 env 文件中,它应该像一个魅力一样工作。

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


【解决方案1】:

从错误中可以看出:

表“dvs.ip_products”>不存在

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 文件以在您的情况下找到$key DB_HOST, DB_DATABASE...,如果未定义将使用您定义为第二个参数的$default

你可以阅读它here

【讨论】:

    猜你喜欢
    • 2018-11-06
    • 2016-01-31
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多