首页 > 解决方案 > 在 laravel 5.8 中连接到第二个数据库时出错

问题描述

我在 MySql 中有一个处于本地模式的数据库,另一个数据库在 MariaDB 的另一台服务器中

我在我的 database.php 文件中对它们进行了如此多的配置,就像在 .env 中一样

数据库.php

 'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'test'),
        'username' => env('DB_USERNAME', 'root'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'prefix_indexes' => true,
        'strict' => true,
        'engine' => null,
        'modes'       => [
            'ONLY_FULL_GROUP_BY',
            'STRICT_TRANS_TABLES',
            'NO_ZERO_IN_DATE',
            'NO_ZERO_DATE',
            'ERROR_FOR_DIVISION_BY_ZERO',
            'NO_ENGINE_SUBSTITUTION',
        ],
    ],

    'asterisk'  => [
        'driver'     => 'mysql',
        'host'       => env('ASTERISK_HOST', 'localhost'),
        'database'   => env('ASTERISK_DATABASE', 'forge'),
        'username'   => env('ASTERISK_USERNAME', 'forge'),
        'password'   => env('ASTERISK_PASSWORD', ''),
        'charset'    => 'utf8',
        'collation'  => 'utf8_unicode_ci',
        'prefix'     => '',
        'strict'     => false,
    ],

.env

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3307
DB_DATABASE=test
DB_USERNAME=root
DB_PASSWORD=''

ASTERISK_HOST=192.168.2.212
ASTERISK_PORT=3306
ASTERISK_DATABASE=database
ASTERISK_USERNAME=usuario
ASTERISK_PASSWORD='password'

我测试连接的测试路径是Route::get('vicidial','Vicidial\VicidialPruebaController@index');

控制器如下

Vicidial\VicidialPruebaController.php

<?php

namespace App\Http\Controllers\Vicidial;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\VicidialModel\VicidialList;
class VicidialPruebaController extends Controller
{
    public function index(){
        $list = VicidialList::find(1);
        dd($list);
    }
}

模型是

VicidialModel\VicidialList.php

<?php

namespace App\VicidialModel;

use Illuminate\Database\Eloquent\Model;

class VicidialList extends Model{

/**
 * The connection name for the model.
 *
 * @var string
 * @author Luis Morales
 */
protected $connection = 'asterisk';

/**
 * The table associated with the model.
 * 
 * @var string
 * @author Luis Morales
 */
protected $table = 'vicidial_list';

/**
 * The primary key associated with the table.
 *
 * @var string
 * @author Luis Morales
 */
protected $primaryKey = 'lead_id';

/**
 * The attributes that are mass assignable.
 *
 * @var array
 * @author Luis Morales
 */
protected $fillable = [
    'entry_date',
    'modify_date',
    'status',
    'user',
    'vendor_lead_code',
    'source_id',
    'list_id',
    'gmt_offset_now',
    'called_since_last_reset',
    'phone_code',
    'phone_number',
    'title',
    'first_name',
    'middle_initial',
    'last_name',
    'address1',
    'address2',
    'address3',
    'city',
    'state',
    'province',
    'postal_code',
    'country_code',
    'gender',
    'date_of_birth',
    'alt_phone',
    'email',
    'security_phrase',
    'comments',
    'called_count',
    'last_local_call_time',
    'rank',
    'owner',
    'entry_list_id' 
];

/**
 * Indicates if the model should be timestamped.
 *
 * @var bool
 * @author Luis Morales
 */
public $timestamps = false;

}

尝试连接时出错,因为连接的一方在一段时间后没有正确响应,或者由于连接的主机无法建立连接而发生错误

在此处输入图像描述

这是对第二个数据库(即 Asterisk)的第一次测试。有了第一个,我的系统就可以工作了

标签: mysqllaravelmariadblaravel-5.8

解决方案


你应该检查ASTERISK_HOST一下:

  1. mariadb 实例正在运行。
  2. 3306 端口未被防火墙阻止。顺便说一句ASTERISK_PORT=3306,您的.env文件中有一个条目,但您没有在'asterisk'连接中使用它(没问题,因为它应该是默认端口,但如果您也检查它会更好)。
  3. mariadb 配置为远程客户端访问,您可以在官方文档的特定页面中找到更多信息。

推荐阅读