数据库配置

数据库配置

数据库默认配置如下,可以在 src/common/config/db.js 中进行修改:

  1. export default {
  2. type: 'mysql',
  3. log_sql: true,
  4. log_connect: true,
  5. adapter: {
  6. mysql: {
  7. host: '127.0.0.1',
  8. port: '',
  9. database: '', //数据库名称
  10. user: '', //数据库帐号
  11. password: '', //数据库密码
  12. prefix: 'think_',
  13. encoding: 'utf8'
  14. },
  15. mongo: {
  16. }
  17. }
  18. };

也可以在其他模块下配置,这样请求该模块时就会使用对应的配置。

数据表定义

默认情况下,模型名和数据表名都是一一对应的。假设数据表前缀是 think_,那么 user 模型对应的数据表为 think_useruser_group 模型对应的数据表为 think_user_group

如果需要修改,可以通过下面 2 个属性进行:

  • tablePrefix 表前缀
  • tableName 表名,不包含前缀

    ES6 方式

  1. export default class extends think.model.base {
  2. init(...args){
  3. super.init(...args);
  4. this.tablePrefix = ''; //将数据表前缀设置为空
  5. this.tableName = 'user2'; //将对应的数据表名设置为 user2
  6. }
  7. }

动态创建类方式

  1. module.exports = think.model({
  2. tablePrefix: '', //直接通过属性来设置表前缀和表名
  3. tableName: 'user2',
  4. init: function(){
  5. this.super('init', arguments);
  6. }
  7. })

修改主键

模型默认的主键为 id,如果数据表里的 Primary Key 设置不是 id,那么需要在模型中设置主键。

  1. export default class extends think.model.base {
  2. init(...args){
  3. super.init(...args);
  4. this.pk = 'user_id'; //将主键字段设置为 user_id
  5. }
  6. }

countsumminmax 等很多查询操作都会用到主键,用到这些操作时需要修改主键。

配置多个数据库

如果项目中有连接多个数据库的需求,可以通过下面的方式连接多个数据库。

  1. //src/common/config/db.js
  2. export default {
  3. type: 'mysql',
  4. mysql: {
  5. host: '127.0.0.1',
  6. port: '',
  7. database: 'test1',
  8. user: 'root1',
  9. password: 'root1',
  10. prefix: '',
  11. encoding: 'utf8'
  12. },
  13. mysql2: {
  14. type: 'mysql', //这里需要将 type 重新设置为 mysql
  15. host: '127.0.0.1',
  16. port: '',
  17. database: 'test2',
  18. user: 'root2',
  19. password: 'root2',
  20. prefix: '',
  21. encoding: 'utf8'
  22. }
  23. }

注意mysql2 的配置中需要额外增加 type 字段将类型设置为 mysql

配置完成后,调用的地方可以通过下面的方式调用。

  1. export default class extends think.controller.base {
  2. indexAction(){
  3. let model1 = this.model('test'); //
  4. let model2 = this.model('test', 'mysql2'); //指定使用 mysql2 的配置连接数据库
  5. }
  6. }

分布式数据库

大的系统中,经常有多个数据库用来做读写分离,从而提高数据库的操作性能。ThinkJS 里可以通过 parser 来自定义解析,可以在文件 src/common/config/db.js 中修改:

  1. //读配置
  2. const MYSQL_READ = {
  3. host: '10.0.10.1',
  4. }
  5. //写配置
  6. const MYSQL_WRITE = {
  7. host: '10.0.10.2'
  8. }
  9. export default {
  10. host: '127.0.0.1',
  11. adapter: {
  12. mysql: {
  13. parser: function(options){ //mysql 的配置解析方法
  14. let sql = options.sql; //接下来要执行的 SQL 语句
  15. if(sql.indexOf('SELECT') === 0){ //SELECT 查询
  16. return MYSQL_READ;
  17. }
  18. return MYSQL_WRITE;
  19. }
  20. }
  21. }
  22. }

parser 解析的参数 options 里会包含接下来要执行的 SQL 语句,这样就很方便的在 parser 里返回对应的数据库配置。

原文: https://thinkjs.org/zh-cn/doc/2.2/model_config.html