thinkphp5.0项目配置多MySQL数据库连接

公司项目需要连接2个MySQL数据库

背景介绍: 公司项目是基于fastadmin 1.4.0.20230711 开发的,里面用到的thinkphp版本是5.0.25,项目涉及到小程序端和设备端,之前做的是两个项目,但是部署在同一台服务器上,分别对应两个数据库,之前两个项目之间的交互是通过互相调用对方接口的方式实现的,优化的时候就想通过在一个项目中连接两个MySQL数据库的方式,避免互相调用带来的性能开销.
在网上查了查thinkphp5.0中如何进行多数据库连接,有的能用有的不能用,这里记录一下方便有需要的同学别走弯路.

项目对应主数据库配置还是配置在application/database.php中

use think\Env;

return [
    // 数据库类型
    'type' => Env::get('database.type', 'mysql'),
    // 服务器地址
    'hostname' => Env::get('database.hostname', '127.0.0.1'),
    // 数据库名
    'database' => Env::get('database.database'),
    // // 用户名
    'username' => Env::get('database.username'),
    // 密码
    'password' => Env::get('database.password'),
    // 端口
    'hostport' => Env::get('database.hostport', '3306'),
]

项目模型中默认会使用database.php中的配置进行数据库连接.
项目中部分模型需要用到另外一个设备数据库,这个时候就要给这些模型指定另外一个数据库连接了,也就是本篇文章的重点,具体的操作步骤如下:

  • 首先在application/config.php中编辑设备数据库的连接信息

    return [
      //其它配置....
      //设备数据库连接信息配置
      'devicedb' => [
          // 数据库类型
          'type' => Env::get('devicedb.type', 'mysql'),
          // 服务器地址
          'hostname' => Env::get('devicedb.hostname', '127.0.0.1'),
          // 数据库名
          'database' => Env::get('devicedb.database', ''),
          // // 用户名
          'username' => Env::get('devicedb.username', ''),
          // 密码
          'password' => Env::get('devicedb.password', ''),
          // 端口
          'hostport' => Env::get('devicedb.hostport', '3306'),
          // 数据库表前缀
          'prefix' => Env::get('devicedb.prefix', 'fa_'),
          // 数据库编码默认采用 utf8mb4
          'charset' => Env::get('devicedb.charset', 'utf8mb4'),
          // 数据库调试模式
          'debug' => Env::get('devicedb.debug', false),
      ]
    ];
    

    可以看到无论是位于database.php中的默认数据库配置,还是在config.php中单独加的设备数据库devicedb对应的配置信息,都是从.env文件中读取的,只不过一个读取的是database配置部分另一个读取的是devicedb配置部分.

  • 在模型中指定要使用的连接名称

    namespace app\device\model;
    use think\Model;
    
    class DeviceModel extends Model
    {
      //配置连接参数 对应config.php中的devicedb配置
      protected $connection = 'devicedb';
    
      //对应数据表名
      protected $name = 'device_lists';
    
      //设置查询结果返回think\collection对象, 支持链式操作
      protected $resultSetType = 'collection';
    }
    

    通过上面的配置之后,当使用DeviceModel模型的时候就会自动通过使用config.php中devicedb对应的配置信息来连接设备数据库进行操作.

你可能感兴趣的:(thinkphp5mysql)