model连贯链式操作
系统支持的连贯操作方法有:
| 连贯操作 | 作用 | 支持的参数类型 |
|---|---|---|
| where* | 用于查询或者更新条件的定义 | 字符串、数组和对象 |
| table | 用于定义要操作的数据表名称 | 字符串和数组 |
| alias | 用于给当前数据表定义别名 | 字符串 |
| data | 用于新增或者更新数据之前的数据对象赋值 | 数组和对象 |
| field | 用于定义要查询的字段(支持字段排除) | 字符串和数组 |
| order | 用于对结果排序 | 字符串和数组 |
| limit | 用于限制查询结果数量 | 字符串和数字 |
| page | 用于查询分页(内部会转换成limit) | 字符串和数字 |
| group | 用于对查询的group支持 | 字符串 |
| having | 用于对查询的having支持 | 字符串 |
| join* | 用于对查询的join支持 | 字符串和数组 |
| union* | 用于对查询的union支持 | 字符串、数组和对象 |
| distinct | 用于查询的distinct支持 | 布尔值 |
| lock | 用于数据库的锁机制 | 布尔值 |
| cache | 用于查询缓存 | 支持多个参数 |
| relation | 用于关联查询(需要关联模型支持) | 字符串 |
| result | 用于返回数据转换 | 字符串 |
| validate | 用于数据自动验证 | 数组 |
| auto | 用于数据自动完成 | 数组 |
| filter | 用于数据过滤 | 字符串 |
| scope* | 用于命名范围 | 字符串、数组 |
| bind* | 用于数据绑定操作 | 数组或多个参数 |
| token | 用于令牌验证 | 布尔值 |
| comment | 用于SQL注释 | 字符串 |
| index | 用于数据集的强制索引(3.2.3新增) | 字符串 |
| strict | 用于数据入库的严格检测(3.2.3新增) | 布尔值 |
所有的连贯操作都返回当前的模型实例对象(this),其中带*标识的表示支持多次调用。
1.数据去重—>distinct
用法:
$model = M('domain');$data = $model->distinct(true)->field('name')->select();
2.时间格式化
用法:
mysql提供了一个时间戳格式化函数from_unixtime来转换格式
FROM_UNIXTIME(unix_timestamp, format)
返回Unix时间标记的一个字符串,根据format格式化。
如果format为空默认会使用%Y-%m-%d %H:%i:%s的格式
$model->field('FROM_UNIXTIME(time,"%Y-%m")')->select();
model模型实例化
D()和M()
在实例化的过程中,经常使用D方法和M方法,
区别在于:
- M方法实例化模型无需用户为每个数据表定义模型类,
- 如果D方法没有找到定义的模型类,则会自动调用M方法。
通俗一点说:
1.M实例化参数是数据库的表名,D实例化的是你自己在Model模型层文件夹下面建立的模型文件;
2.M则是通过直接实例化Model方法(ThinkPHP基类)来动态的实例化一个Model对象,即使这个对应的Model文件不存在,D就是实例化一个基于Model文件的Model;
例如:
$user = new UserModel();等价于$user = D('user');如果实例化的是一个空模型例如 $Demo = new Model();那么它等价于 $Demo = M();
