tp6不支持动态数据库连接?

来源:12-10 利用高性能的redis延迟队列处理无效订单(上)

stevenfung

2021-01-15

请问tp6是否取消了动态链接数据库? tp5是可以的
图片描述
提示错误:
图片描述

写回答

2回答

天经地义

2021-01-17

回复 stevenfung:TP6没有取消动态链接,只是使用方法变了,需要事先定义链接的参数在database.php的配置文件中,使用时只传connections里的key


$connection属性只接收database.php文件中connections里所定义的链接,是字符串,而不是整个数组,


因为vendor/topthink/think-orm/src/DbManager.php中的connect方法如下,第一个参数是接收字符串或null,配置的标识,而不是整个配置参数,如果为null会找到默认的标识


所以要使用动态链接最好事先在database.php定义好,不然只能Config::set动态修改database.php的配置内容

/**
 * 创建/切换数据库连接查询
 * @access public
 * @param string|null $name  连接配置标识
 * @param bool        $force 强制重新连接
 * @return ConnectionInterface
 */
public function connect(string $name = null, bool $force = false)
{
    return $this->instance($name, $force);
}



下面是tp5.1的链接方法,接收的是整个配置参数,而不是标识

/**
 * 连接数据库方法
 * @access public
 * @param  array         $config 连接参数
 * @param  integer       $linkNum 连接序号
 * @param  array|bool    $autoConnection 是否自动连接主数据库(用于分布式)
 * @return PDO
 * @throws Exception
 */
public function connect(array $config = [], $linkNum = 0, $autoConnection = false){
    ...
}


0
0

天经地义

2021-01-16

Config::set($config, 'database');

$db_instance = Db::connect('mysql');

同学你可以试一下这种方法

0
2
天经地义
回复
stevenfung
回复无法贴代码块,我新开了一个回复
2021-01-17
共2条回复

全流程开发 TP6.0实战高并发电商服务系统

一课就能掌握TP6.0基础及运用,打造完整高并发的电商后端项目

1458 学习 · 1310 问题

查看课程