mysql - 在 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)的第一次测试。有了第一个,我的系统就可以工作了
解决方案
你应该检查ASTERISK_HOST
一下:
- mariadb 实例正在运行。
- 3306 端口未被防火墙阻止。顺便说一句
ASTERISK_PORT=3306
,您的.env
文件中有一个条目,但您没有在'asterisk'
连接中使用它(没问题,因为它应该是默认端口,但如果您也检查它会更好)。 - mariadb 配置为远程客户端访问,您可以在官方文档的特定页面中找到更多信息。
推荐阅读
- unit-testing - 当数据库上下文 n 使用块分隔时测试未通过
- c - 为什么将流分配给函数内部的 fopen 时将 FILE * 流发送为 null?
- c++ - C ++如何在容器类复制构造函数中复制分配器对象
- django - 是否有解决网址问题的方法
- mysql - 获取表名并将它们传递给字段 SELECT
- c# - 类类型对象为 HttpGet
- jquery - JQuery中的DIV高度问题(错误高度)
- angular - 使用未在任何地方注入的角度服务
- c++ - 组件未在 Qt 中使用新实例化的插槽中检测到
- cloud - 雾中存储是否类似于云?雾节点在发送到云端之前是否会对数据进行一些处理?