多数据库连接
首先我们来看一下单个数据库的连接操作,这里官网的文档说得十分清楚:
数据库的配置文件为./config/dbs.php,默认使用的是MySQL数据库,所以需要配置MySQL的连接信息。servers选项用于配置数据库服务器相关信息,可以配置多组数据库实例,每组包括数据库的账号、密码、数据库名字等信息。不同的数据库实例,使用不同标识作为下标。
tables选项用于配置数据库表的表前缀、主键字段和路由映射关系,可以配置多个表,下标为不带表前缀的表名,其中__default__下标选项为缺省的数据库路由,即未配置的数据库表将使用这一份默认配置。
示例
return array(
/**
* DB数据库服务器集群
*/
'servers' => array(
'db_master' => array( //服务器标记
'host' => '127.0.0.1', //数据库域名
'name' => 'phalapi', //数据库名字
'user' => 'root', //数据库用户名
'password' => ''", //数据库密码
'port' => 3306, //数据库端口
'charset' => 'UTF8', //数据库字符集
),
),
/**
* 自定义路由表
*/
'tables' => array(
//通用路由
'__default__' => array(
'prefix' => 'tbl_',
'key' => 'id',
'map' => array(
array('db' => 'db_master'),
),
),
),
);
而如果有多个数据库需要连接进行操作,则只需在servers节点下配置数据库的相关信息。注意若为其他服务器上的数据库,user必须写为数据库的用户,不能写root,密码也需要相对的user的密码。但是目前只找到利用这种配置方法实例化数据库中的一张前缀不同的表,若两个数据库中的表前缀相同还好说,但是往往不同数据库的前缀名不一致,这时就需要在tables节点下增加单张数据表的配置了(包括分表)。
'user' => array( //表名
'prefix' => 'demo_', //表名前缀
'key' => 'id', //表主键名
'map' => array(
array('db' => 'demo'), // 这里可以指定使用哪个库
),
),
另外一种解决办法是重新实例化一个notorm对象,如$di->notorm2 = new NotORMDatabase($di->config->get('mydbs'), $di->debug);
这里我们将示例的dbs复制新增一个mydbs节点,将自己的数据库信息填入即可实现数据表前缀的统一问题。
近期踩坑记录
- 微信公众号网页授权登录确实不能在微信外的网页中打开,但是利用uniapp框架的webview组件在微信浏览器内却无法打开,具体原因未知。
- uniapp发布为h5版时需要注意在接口服务器上解决跨域问题。在项目目录./public下的init.php加
\PhalApi\DI()->response->addHeaders('Access-Control-Allow-Origin', 'http://ex.example.com');
即可。