属性值

概述

模型的属性是一个模型的基本的信息。一个Person的模型可能有属性叫做firstName,lastName,phoneNumber,age,birthDate和emailAddress。

属性选项

这些选项可以用来执行各种约束条件并且添加特殊的增强功能到我们的模型中。

Type

指定该属性存储的数据类型,可以使如下的一种:

string
    text
    integer
    float
    date
    datetime
    boolean
    binary
    array
    json
    defaultsTo

当创建一条记录的时候,如果没有设置任何值,该记录将会创建一个defaultsTo指定的值:

attributes: {
  phoneNumber: {
  type: 'string',
  defaultsTo: '111-222-3333'
},
orderNumber: {
  type: 'text',
  defaultsTo: function() {
  return uuid.v4();
}
}
}
autoIncrement

设置该属性是一个自动递增的关键词。当一条记录被添加到模型中去,如果该属性的值没有指定,它将会根据最近的记录的值递增加1.注意:指定autoIncrement的属性的数据类型应该是type: 'integer'。同时请牢记于心:在不同的数据存储支持的程度各有不同。比如,MySQL不允许每张表多余一个的自动递增列。

attributes: {
  placeInLine: {
  type: 'integer',
  autoIncrement: true
}
}
unique

确保目标属性没有出现两条记录有同样的值。这是一个适配器层的约束条件,所以在大部分情况下这会让该属性成为一个唯一的索引在底层数据库创建的时候。

attributes: {
  username: {
  type: 'string',
  unique: true
}
}
当使用带有utf8mb4字符集的MySQL,你会需要通过MySQL直接在你的表中添加 size约束条件到合适的列中。否则,因为在MySQL适配器中type: 'string'会被转换为varchar(255),所以unique: true的约束条件将会导致一个'index too long'的错误: ER_INDEX_COLUMN_TOO_LONG: Index column size too large. The maximum column size is 767 bytes.

primaryKey

使用了这个那么该记录的这条属性就会成为主要关键词。一条模型中只能有一个属性是primaryKey。注意:除非autoPK设置为false,否则不要去使用该关键词。

attributes: {
  uuid: {
    type: 'string',
    primaryKey: true,
    required: true
  }
}
enum

一个特殊的属性验证,也就是只会保存那些匹配白名单中的那些值。

attributes: {
  state: {
    type: 'string',
    enum: ['pending', 'approved', 'denied']
  }
}
size

如果在适配器中支持,那么可以用来定义属性的长度,比如在MySQL,size可以指定为一个数字来创建一个带有SQL 数据类型varchar(n)的一列。

attributes: {
  name: {
    type: 'string',
    size: 24
  }
}
columnName

在一个属性内部定义中,你可以指定一个columnName来强制让Sails或Waterline来存储该属性在一个配置的集合中一个指定列的数据。我们知道这在SQL-特有中不是必须的--它也可以工作在MongoDb等。

当columnName属性主要设计为与已经存在的或者是传统的数据库工作,它也可以在你的数据库和其他应用共共享的时候这种情况下有用,或者你没有权限改变schema。

为了存储或者获取你的模型的numberOfWheels属性到/从number_of_round_rotating_things列中:

// An attribute in one of your models:
// ...
numberOfWheels: {
    type: 'integer',
    columnName: 'number_of_round_rotating_things'
}
// ...
接下去是有更形象的例子。 让我们假设你有一个User模型在你的Sails app中,如下:

// api/models/User.js
module.exports = {
connection: 'shinyNewMySQLDatabase',
attributes: {
name: {
type: 'string'
},
password: {
type: 'string'
},
email: {
type: 'email',
unique: true
}
}
};
所有的一切都工作得很好除了使用一个已经存在的MySQL数据库放在一个你想存放你想要的用户的地方:

// config/connections.js
module.exports = {
// ...

// Existing users are in here!
rustyOldMySQLDatabase: {
adapter: 'sails-mysql',
user: 'bofh',
host: 'db.eleven.sameness.foo',
password: 'Gh19R!?had9gzQ#Q#Q#%AdsghaDABAMR>##G<ADMBOVRH@)$(HTOADG!GNADSGADSGNBI@(',
database: 'jonas'
},
// ...
};
让我们假设这里有一张叫做our_users的表放在旧的MySQL数据库,如下:

the_primary_key    email_address    full_name    seriously_encrypted_password
7    mike@sameness.foo    Mike McNeil    ranchdressing
14    nick@sameness.foo    Nick Crumrine    thousandisland
为了从Sails中使用它,你需要改变你的User模型成这样:

// api/models/User.js
module.exports = {
connection: 'rustyOldMySQLDatabase',
tableName: 'our_users',
attributes: {
id: {
type: 'integer',
unique: true,
primaryKey: true,
columnName: 'the_primary_key'
},
name: {
type: 'string',
columnName: 'full_name'
},
password: {
type: 'string',
columnName: 'seriously_encrypted_password'
},
email: {
type: 'email',
unique: true,
columnName: 'email_address'
}
}
};
你也许注意到了我们在这个例子中也使用了tableName属性。这允许我们去控制将会用于放置我们的数据的表的名字。

sails 数据库字段相关推荐

  1. Mysql函数group_concat、find_in_set 多值分隔字符字段进行数据库字段值翻译

    Mysql函数group_concat.find_in_set进行数据库字段值翻译 场景 配方表:记录包含的原料 sources表示原料,字段值之间用逗号分隔 原料表:对应原料id和原料名称 现需要查 ...

  2. php 判断是否有相同的ID,如果有就修改数据库字段,没有就插入数据库字段

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. php代码 <?phpheader("Content-Type:text/html;chars ...

  3. 设计数据库字段或者java中使用boolean型时需谨慎

    boolean型变量只有两个值 false和true,我们在设计数据库字段时或者定义java变量时会使用boolean,通常情况下开关类的变量使用无可非议,但请一定要考虑到扩展性. 使用前请仔细考虑一 ...

  4. ASP.NET 2.0 - 如何把上传的文件保存到数据库字段 (转自章立民CnBlogs)

    许多朋友询问如何将用户在网页上所选取的图片写入数据库字段,我们撰写了一个网页范例来示范如何实作.以下是这一个网页范例的操作流程: 1.           请如图表 1 所示,按下「先于数据库中建立所 ...

  5. 查询时注意 查询字段传值参数类型,尽量和数据库字段类型一致

    查询时注意 查询字段传值参数类型,尽量和数据库字段类型一致. 数据量越大查询问题会越严重,到几十万的数据时,类型一致和不一致会是千倍差距 转载于:https://www.cnblogs.com/i60 ...

  6. Python数据库字段拆分数据

    7 Python案例 7.2 拆分数据 7.2.1 解析数据库字段里的数据 需求:从数据库字段里解析得到结构化数据. 解决方法:通过Python的pandas以及内置的函数完成该需求.  Python ...

  7. MyBatis入门实例-包括实体类与数据库字段对应CLOB字段处理

    1.我的开发环境是 jdk1.7+ecplise+oracle 11g 用到的jar包:mybatis-3.1.1.jar ojdbc6.jar 2.项目整体结构 3.首先配置conf.xml文件 [ ...

  8. 开发技巧-使用SQL与Navicat快速导出一个自定义的MYSQL数据库字段表格(数据字典)为Word或Excel

    1.基于MYSQL快速形成数据字典表格(数据库字段表格元信息)的需求 在书写数据库开发文档或相关文章时,总是可能应用到所设计的数据库元信息,形成一个科学的数据字典表格,相比传统的在Word.Excel ...

  9. oracle 数据库字段名与实体类字段名称不匹配的处理方法

    之前公司一直都使用sql server 即使数据库字段名称与实体类名称不相同 可以使用诸如: select id as userId from tb_user 这种写法,可换到了oracle 之后坑爹 ...

  10. sql 动态写入数据库字段_批处理写入,动态SQL和参数化SQL,数据库的性能如何?...

    sql 动态写入数据库字段 最有效的数据库优化之一是批处理写入. 批处理写入受大多数现代数据库和JDBC标准的一部分支持,并且受大多数JPA提供程序支持. 普通数据库访问包括在单独的数据库/网络访问中 ...

最新文章

  1. 昆虫大脑帮助AI解决导航难题
  2. adobe仿宋std r常规_宜春MF4003-5-06-CV-R气体质量流量计
  3. engineering department induction ppt
  4. oracle Hint 使用
  5. ubuntu wps缺少字体_WPS各版本
  6. oracle+基本内置函数,oracle 内置函数
  7. Linux下设置python脚本文件为服务
  8. js apply/call/caller/callee/bind使用方法与区别分析
  9. 产品迭代发布如何更快速?阿里持续集成与持续交付实践之路全解析
  10. easymock使用方法_EasyMock无效方法– ExpectLastCall()
  11. python实现k core算法_python实现k-近邻算法
  12. HTMLParser错误解决
  13. python利用有道词典翻译_Python调用有道词典翻译
  14. 攻防世界 逆向 logmein
  15. centos7开启网卡功能
  16. Region Proposal by Guided Anchoring论文解读
  17. matlab三相变压器,simulink三相变压器
  18. 微信小程序开发笔记 进阶篇④——getPhoneNumber 获取用户手机号码(小程序云)
  19. 【数据存储】signed,unsigned到底怎么区分?如何计算?
  20. 配置邮箱和邮件大小限制 !

热门文章

  1. 中兴如何远程服务器时间同步,IPTV系统时钟同步功能配置方法——中兴
  2. 学习手机软件开发学什么,怎样学?
  3. 经典sql server基础语句大全
  4. 创业者两大特征:喜欢折腾与坚持不懈
  5. 云主机是什么,怎么才能购买性价比高的云主机
  6. μCOS-Ⅱ操作系统中的PEND(阻塞zuse)和SUSPEND(挂起)和SLEEP(睡眠)三种状态
  7. 操作系统ready pend subpend区别
  8. A搜索算法(python)之八数码问题
  9. 赠书 | 《网络威胁情报技术指南》
  10. php用do while实现斐波那契数列,php实现斐波那契数列