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

用法:

  1. $model = M('domain');
  2. $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的格式

  1. $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;

例如:

  1. $user = new UserModel();
  2. 等价于$user = D('user');
  3. 如果实例化的是一个空模型
  4. 例如 $Demo = new Model();
  5. 那么它等价于 $Demo = M();