动态

详情 返回 返回

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對應的配置信息來連接設備數據庫進行操作.

user avatar u_15745565 头像 seatunnel 头像 zohocrm 头像 shawn_5dd516205b8bd 头像
点赞 4 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.