官方代码如下
return [ // 数据库类型 'type' => 'mysql', // 服务器地址 'hostname' => '127.0.0.1', // 数据库名 'database' => 'thinkphp', // 数据库用户名 'username' => 'root', // 数据库密码 'password' => '', // 数据库连接端口 'hostport' => '', // 数据库连接参数 'params' => [], // 数据库编码默认采用utf8 'charset' => 'utf8', // 数据库表前缀 'prefix' => 'think_', //数据库配置1 'db_config1' => [ // 数据库类型 'type' => 'mysql', // 服务器地址 'hostname' => '192.168.1.8', // 数据库名 'database' => 'thinkphp', // 数据库用户名 'username' => 'root', // 数据库密码 'password' => '1234', // 数据库编码默认采用utf8 'charset' => 'utf8', // 数据库表前缀 'prefix' => 'think_', ], //数据库配置2 'db_config2' => 'mysql://root:[email protected]:3306/thinkphp#utf8', ];
连接方式
Db::connect('db_config1')->table('user')->find(); Db::connect('db_config2')->table('user')->find();
发现以第一种方式既db_config1的配置方式链接数据库,报错!提示未定义数据库类型!
查看Db.php文件代码如下
private static function parseConfig($config) { if (empty($config)) { $config = Config::get('database'); } elseif (is_string($config) && false === strpos($config, '/')) { **$config = Config::get($config); // 支持读取配置参数** } return is_string($config) ? self::parseDsn($config) : $config; }
加粗位置
$config = Config::get($config);
无法获取到db_config1的配置信息
查看config中的get方法
public static function get($name = null, $range = '') { $range = $range ?: self::$range; // 无参数时获取所有 if (empty($name) && isset(self::$config[$range])) { return self::$config[$range]; } // 非二级配置时直接返回 if (!strpos($name, '.')) { $name = strtolower($name); return isset(self::$config[$range][$name]) ? self::$config[$range][$name] : null; } // 二维数组设置和获取支持 $name = explode('.', $name, 2); $name[0] = strtolower($name[0]); if (!isset(self::$config[$range][$name[0]])) { // 动态载入额外配置 $module = Request::instance()->module(); $file = CONF_PATH . ($module ? $module . DS : '') . 'extra' . DS . $name[0] . CONF_EXT; is_file($file) && self::load($file, $name[0]); } return isset(self::$config[$range][$name[0]][$name[1]]) ? self::$config[$range][$name[0]][$name[1]] : null; }
config支持获取二级配置信息,so 第一种链接方式改为Db::connect(‘database.db_config1’)->table(‘user’)->find(); 成功获取表信息!