### **model属性**
| 属性名 | 默认值 | 描述 | 类型 |
| --- | --- | --- | --- |
| | <h2>属性</h2> | | |
| $links| [] | 数据库查询对象池(静态属性) | array|
| $connection | []| 数据库配置 | array |
| $parent| none | 父关联模型对象 | object |
| $query| none | 数据库查询对象 | object |
| $name | none | 模型名称(不加前缀) | string |
| $table | none | 数据表名称(需要加前缀) | string |
| $class | none | 当前类名称 | string |
| $event | [] | 回调事件 | array |
| $error| none | 错误信息| string|
| $validate| none | 字段验证规则 | array|
| $pk| none | 数据表主键 复合主键使用数组定义 不设置则自动获取 | string|
| $field| []| 数据表字段信息 留空则自动获取 | array |
| $except| [] | 数据排除字段 | array|
| $readonly| []| 只读字段 | array |
| $visible| []| 显示属性 | array |
| $hidden| []| 隐藏属性 | array |
| $append| []| 追加属性 | array |
| $data| []| 数据信息 | array |
| $origin| []| 原始数据 | array |
| $relation| []| 关联模型 | array |
| $auto| []| 保存自动完成列表 | array |
| $insert| []| 新增自动完成列表 | array |
| $update| []| 更新自动完成列表 | array |
| $autoWriteTimestamp| none| 是否需要自动写入时间戳 如果设置为字符串 则表示时间字段的类型 | bool或者string|
| $createTime| 'create_time'| 创建时间字段 | string |
| $updateTime| 'update_time' | 更新时间字段 | string|
| $dateFormat| none| 时间字段取出后的默认时间格式 | ?? |
| $type| []| 字段类型或者格式转换 | array |
| $isUpdate| false | 是否为更新数据 | bool|
| $replace| false| 是否使用Replace | bool|
| $force| false | 是否强制更新所有数据 | bool|
| $updateWhere| none| 更新条件 | ??|
| $failException| false | 验证失败是否抛出异常 | bool|
| $useGlobalScope| true| 是全局查询范围 | bool|
| $batchValidate| false | 是否采用批量验证 | bool|
| $resultSetType| none| 查询数据集对象 | object|
| $relationWrite| none | 关联自动写入 | ??|
| $initialized| [] | 初始化过的模型 | array |
| $readMaster| none | 是否从主库读取(静态属性)(主从分布式有效) | array |
### **model方法**
| 方法名(public) | 描述 | 参数 | 返回值|
| --- | --- | --- | ---|
| | <h2>方法</h2> | | |
| readMaster | 是否从主库读取数据(主从分布有效) | ($all = false) |this|
| newInstance | 创建新的模型实例 | ($data = [], $isUpdate = false, $where = null) | Model |
| getQuery| 获取当前模型的查询对象 | ($buildNewQuery = false) | Query|
| db | 获取当前模型的数据库查询对象 | ($useBaseQuery = true, $buildNewQuery = true) |Query|
| setParent | 设置父关联对象 | ($model) | this |
| getParent | 获取父关联对象 | void | Model |
| data | 设置数据对象值 | ($data, $value = null) | this |
| getData | 获取对象原始数据 如果不存在指定字段返回false | ($name = null) | mixed |
| isAutoWriteTimestamp | 是否需要自动写入时间字段 |($auto) | this |
| force | 新是否强制写入数据 而不做比较 | ($force = true) | this |
| setAttr | 修改器 设置数据对象值 | ($name, $value, $data = []) | this |
| getRelation | 获取当前模型的关联模型数据 | ($name = null)| mixed |
| setRelation | 设置关联数据对象值 | ($name, $value) | this |
| getAttr| 获取器 获取数据对象的值;如果存在`'get'.$name.'Attr'`方法则调用它,否则查看type属性里是否以键的形式存在,存在即转换类型,否则查看是是createTime和updateTime属性的值,是则转换时间格式,否则将$name当做关联方法执行(该属性为驼峰或小写+下划线格式都可以,最后都会转化为驼峰格式执行) | ($name) | mixed |
| append | 设置需要追加的输出属性 | ($append = [], $override = false) | this |
| appendRelationAttr | 设置附加关联对象的属性 | ($relation, $append) | this |
| hidden | 设置需要隐藏的输出属性 | ($hidden = [], $override = false) | this |
| visible | 设置需要输出的属性 | ($visible = [], $override = false) | this |
| toArray | 转换当前模型对象为数组 | void | array |
| toJson | 转换当前模型对象为JSON字符串 | ($options = JSON_UNESCAPED_UNICODE) | string |
| removeRelation | 移除当前模型的关联属性 | void | this |
| toCollection | 转换当前模型数据集为数据集对象 | ($collection) | \think\Collection |
| together | 关联数据一起更新 | ($relation) | this |
| getPk | 获取模型对象的主键 | ($name{模型名} = '') | mixed |
| replace | 新增数据是否使用Replace | ($replace = true) | this |
| **save** | 保存当前数据对象 | ($data = [], $where = [], $sequence = null) | integer\|false |
| getChangedData | 获取变化的数据 并排除只读数据 | void | array |
| setInc | 字段值(延迟)增长 | ($field, $step = 1, $lazyTime = 0) | integer\|true |
| setDec | 字段值(延迟)递减 | ($field, $step = 1, $lazyTime = 0) | integer\|true |
| **saveAll** | 保存多个数据到当前数据对象 | ($dataSet, $replace = true) | array\|false |
| allowField | 设置允许写入的字段 | ($field) | this |
| except | 设置排除写入的字段 | ($field) | this |
| readonly | 设置只读字段 | ($field) | this |
| isUpdate | 是否为更新数据 | ($update = true, $where = null) | this |
| **delete** | 删除当前的记录 | void | integer |
| auto | 设置自动完成的字段( 规则通过修改器定义) | ($fields) | this |
| validate | 设置字段验证 | ($rule = true, $msg = [], $batch = false) | this |
| validateFailException | 设置验证失败后是否抛出异常 | ($fail = true) | this |
| getError | 返回模型的错误信息 | void | string\|array |
| event | 注册回调方法 | ($event, $callback, $override = false) | void |
| **create** | 写入数据(静态方法) | ($data = [], $field = null) | this |
| **update** | 更新数据(静态方法) | ($data = [], $where = [], $field = null) | this |
| **get** | 查找单条记录(静态方法) | ($data, $with = [], $cache = false)<br>$data 主键值或者查询条件(闭包)<br>$with 关联预查询 | static[]\|false (**注**:static返回最终运行的那个子类模型对象) |
| **all** | 查找所有记录(静态方法) | ($data = null, $with = [], $cache = false) | static[]\|false |
| **destroy** | 删除记录(静态方法) | ($data) | integer |
| scope | 命名范围(静态方法) | ($name) | Query |
| useGlobalScope | 设置是否使用全局查询范围(静态方法) | ($use{布尔}) | Query |
| has | 根据关联条件查询当前模型(静态方法) | ($relation, $operator = '>=', $count = 1, $id = '*') | Relation\|Query |
| hasWhere | 根据关联条件查询当前模型(静态方法) | ($relation, $where = [], $fields = null) | Relation\|Query |
| relationQuery | 查询当前模型的关联数据 | ($relations) | this |
| eagerlyResultSet | 预载入关联查询 返回数据集 | (&$resultSet, $relation) | array |
| eagerlyResult | 预载入关联查询 返回模型对象 | (&$result, $relation) | Model |
| relationCount | 关联统计 | (&$result, $relation) | void |
| **hasOne** | HAS ONE 关联定义 | ($model, $foreignKey = '', $localKey = '', $alias = [], $joinType = 'INNER') | HasOne |
| **belongsTo** | BELONGS TO 关联定义 | ($model, $foreignKey = '', $localKey = '', $alias = [], $joinType = 'INNER') | BelongsTo |
| **hasMany** | HAS MANY 关联定义 | ($model, $foreignKey = '', $localKey = '') | HasMany |
| **hasManyThrough** | HAS MANY 远程关联定义 | ($model, $through, $foreignKey = '', $throughKey = '', $localKey = '') | HasManyThrough |
| **belongsToMany** | BELONGS TO MANY 关联定义 | ($model, $table = '', $foreignKey = '', $localKey = '') | BelongsToMany |
| **morphMany** | ORPH MANY 关联定义 | ($model, $morph = null, $type = '') | MorphMany |
| **morphOne** | MORPH One 关联定义 | ($model, $morph = null, $type = '') | MorphOne |
| **morphTo** | MORPH TO 关联定义 | ($morph = null, $alias = []) | MorphTo |
| __call | 调用当前类不存在或者不可访问的方法时<br>比如:<br>调用model('user')->test('hello')test在当前模型或者model类中不存在,那么查找是否有scop_test('hello'),如果还不存在则调用Query对象里的test方法,Query还不存在,那就查看方法是否是getby+字段名(如getbyusername('tom'),那就是查询username为tom的数据即**动态查询**,如果还找不到则报错) | ($method, $args) | |
| __callStatic | 调用当前类不存在或者不可访问的静态方法时触发,用法同__call | ($method, $args) | |
| __isset | 调用当前类不存在或者不可访问的属性使用isset() 或者empty()时触发,一般用来在模型中调用表字段 | | |
| __unset | 当对不可访问的属性说那个unset()时触发,销毁数据对象的值 | ($name) | |
| __toString | 当model对象被当做字符串时触发,将类对象转为json?;如echo model('user') | | |
| jsonSerialize | 实现 JsonSerializable 接口 调用 json_encode() 时触发(对模型对象使用json_encode时触发),转成数组?| | |
| offsetSet | 实现ArrayAccess的方法 ,以数组的方式设置模型属性时触发如:$user['data'] = $data;触发setAttr方法 | | |
| offsetExists | 实现ArrayAccess的方法 isset($user['data'])时触发__isset方法 | | |
| offsetUnset | 实现ArrayAccess的方法 unset($user['data'])时触发__unset方法 | | |
| offsetGet | 实现ArrayAccess的方法 $user['data']时触发getAttr方法 | | |
| __set | 设置不存在的属性时触发修改器,存在【get字段名Attr】则返回字段值,不存在则查询关联数据并保存 | $name, $value) | void |
| __get | 调用不存在的属性时触发获取器getAttr() | ($name) | void |
| | | | |
## -----------------------------------------模型事件快捷方法(都为静态方法)--------------------------------------------------------
beforeInsert($callback, $override = false)
afterInsert($callback, $override = false)
beforeUpdate($callback, $override = false)
afterUpdate($callback, $override = false)
beforeWrite($callback, $override = false)
afterWrite($callback, $override = false)
beforeDelete($callback, $override = false)
afterDelete($callback, $override = false)
## **HasOne**
| 属性名 | 默认值 | 描述 | 类型 |
| --- | --- | --- | --- |
| | <h2>属性</h2> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| 方法名(public) | 描述 | 参数 | 返回值|
| --- | --- | --- | ---|
| | <h2>方法</h2> | | |
| | | | |
| | | | |
| | | | |
| | | | |
kasOne与BelongsTo继承至OneToOne
OneToOne、HasMany、HasManyThrough、BelongsToMany、MorphMany、MorphOne、MorphOne、MorphTo继承至Relation
## **Relation**
| 方法名(public) | 描述 | 参数 | 返回值|
| --- | --- | --- | ---|
| | <h2>方法</h2> | | |
| getParent | 获取关联的所属模型 | void | Model |
| getModel | 获取当前的关联模型对象实例 | void | Model |
| getQuery | 获取关联的查询对象 | void | Query |
| selfRelation | 设置当前关联为自关联 | ($self = true) | this |
| isSelfRelation | 当前关联是否为自关联 | void | bool |
| __call | 获取Query中的方法 | ($method, $args) | mixed |
| | | | |
| | | | |
## **OneToOne**
| 方法名(public) | 描述 | 参数 | 返回值|
| --- | --- | --- | ---|
| | <h2>方法</h2> | | |
| joinType | 设置join类型 | ($type) | this |
| eagerly | 预载入关联查询(JOIN方式) | (Query $query, $relation, $subRelation, $closure, $first) | void |
| eagerlyResultSet | 预载入关联查询(数据集) | (&$resultSet, $relation, $subRelation, $closure) | void |
| eagerlyResult | 预载入关联查询(数据) | (&$result, $relation, $subRelation, $closure) | void |
| save | 保存(新增)当前关联数据对象 | ($data) | Model\|false |
| setEagerlyType | 设置预载入方式 | ($type) | this |
| getEagerlyType | 获取预载入方式 | void | integer |
| bind | 绑定关联表的属性到父模型属性 | ($attr) | this |
| getBindAttr | 获取绑定属性 | void | array |
| relationCount | 关联统计 | ($result, $closure) | integer |
## **HasOne**
| 方法名(public) | 描述 | 参数 | 返回值|
| --- | --- | --- | ---|
| | <h2>方法</h2> | | |
| getRelation | 延迟获取关联数据 | ($subRelation = '', $closure = null) | array\|false\|\PDOStatement\|string\|Model |
| has | 根据关联条件查询当前模型 | void | Query |
| hasWhere | 根据关联条件查询当前模型 | ($where = [], $fields = null) | Query |
## **BelongsTo**
| 方法名(public) | 描述 | 参数 | 返回值|
| --- | --- | --- | ---|
| | <h2>方法</h2> | | |
| getRelation | 延迟获取关联数据 | ($subRelation = '', $closure = null) | array\|false\|\PDOStatement\|string\|Model |
| has | 根据关联条件查询当前模型 | void | Query |
| hasWhere | 根据关联条件查询当前模型 | ($where = [], $fields = null) | Query |
| associate | 添加关联数据 | e($model) | Model |
| dissociate | 注销关联数据 | void | Model |
## **HasMany**
| 方法名(public) | 描述 | 参数 | 返回值|
| --- | --- | --- | ---|
| | <h2>方法</h2> | | |
| getRelation | 延迟获取关联数据 | ($subRelation = '', $closure = null) | array\|false\|\PDOStatement\|string\|Model |
| has | 根据关联条件查询当前模型 | void | Query |
| hasWhere | 根据关联条件查询当前模型 | ($where = [], $fields = null) | Query |
| eagerlyResultSet | 预载入关联查询 | (&$resultSet, $relation, $subRelation, $closure) | void |
| eagerlyResult | 预载入关联查询 | (&$result, $relation, $subRelation, $closure) | void |
| relationCount | 关联统计 | ($result, $closure) | integer |
| getRelationCountQuery | 创建关联统计子查询 | ($closure, &$name = null) | string |
| save | 保存(新增)当前关联数据对象 | ($data) | Model\|false |
| make | 创建关联对象实例 | ($data = []) | Model |
| saveAll | 批量保存当前关联数据对象 | (array $dataSet) | integer |
## **xxx**
| 方法名(public) | 描述 | 参数 | 返回值|
| --- | --- | --- | ---|
| | <h2>方法</h2> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
## **xxx**
| 方法名(public) | 描述 | 参数 | 返回值|
| --- | --- | --- | ---|
| | <h2>方法</h2> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
## **xxx**
| 方法名(public) | 描述 | 参数 | 返回值|
| --- | --- | --- | ---|
| | <h2>方法</h2> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
## **xxx**
| 方法名(public) | 描述 | 参数 | 返回值|
| --- | --- | --- | ---|
| | <h2>方法</h2> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
- 目录结构与基础
- 修改数据后页面无变化
- 防跨目录设置
- input
- 系统目录
- 自动生成的文件以及目录
- 类自动加载
- url生成
- 数据增删改查
- 增加数据
- 数据更新
- 数据删除
- 数据查询
- 架构
- 生命周期
- 入口文件
- URL访问规则
- 配置
- 默认惯例配置配置
- 初始应用配置
- 路由
- 域名路由
- URL生成
- 数据库操作
- 方法列表
- 连接数据库
- 分布式数据库
- 查询构造器
- 查询数据
- 添加数据
- 更新数据
- 删除数据
- 查询语法
- 聚合查询(统计)
- 时间查询
- 高级查询
- 视图查询
- 子查询
- 辅助查询之链式操作
- where
- table
- alias
- field
- order
- limit
- page
- group
- having
- join
- union
- distinct
- lock
- cache
- comment
- fetchSql
- force
- bind
- partition
- strict
- failException
- sequence(pgsql专用)
- 查询事件
- 事务操作
- 监听SQL
- 存储过程
- 数据集
- 控制器
- 跳转和重定向
- 空控制器和空操作
- 分层控制器
- Rest控制器
- 资源控制器
- 自动定位控制器
- tp3的增删改查
- 方法注入
- 模型
- 属性方法一览
- 类方法详解
- Model
- 调用model不存在的属性
- 调用model中不存在的方法
- 调用model中不存在的静态方法
- hasOne
- belongsTo
- hasMany {Relation}
- belongsToMany
- hasManyThrough
- morphMany
- morphOne
- morphTo
- ::hasWhere {Query}
- ::has
- relationCount
- data 【model】
- setInc {integer|true}
- setDec {integer|true}
- save {integer | false}
- saveAll {array}
- delete {integer}
- ::get 查询单条数据 {Model}
- ::all 查询多条数据{Model [ ]}
- ::create 新增单条数据 {Model}
- ::update 更新单条数据 {Model}
- ::destroy {integer}
- ::scope {Query}
- getAttr {mixed}
- xxx
- append
- appendRelationAttr
- hidden
- visible
- except
- readonly
- auto
- together
- allowField
- isUpdate
- validate
- toCollection
- toJson
- toArray
- 定义
- 新增
- 更新
- 查询
- 删除
- 聚合
- 获取器
- 修改器
- 时间戳
- 只读字段
- 软删除
- 类型转换
- 数据完成
- 查询范围
- 模型分层
- 数组访问和转换
- JSON序列化
- 事件
- 关联
- 一对一关联
- 主表一对一关联
- 从表一对一关联(相对关联)
- 一对多关联
- 主表定义一对多关联
- 从表定义一对多关联
- 远程一对多
- 多对多关联
- 多态关联
- 动态属性
- 关联预载入with()
- 关联统计
- N+1查询
- 聚合模型
- Model方法集合
- 表单验证
- 验证器
- 验证规则
- 错误信息
- 验证场景
- 控制器验证
- 模型验证
- 内置规则
- 静态调用
- 表单令牌
- Token身份令牌
- 视图
- 模版
- 变量输出
- 函数输出
- Request请求参数
- 模板注释及原样输出
- 三元运算
- 内置标签
- 模板继承
- 模板布局
- 日志
- 日志初始化
- 日志驱动
- 日志写入
- 独立日志
- 日志清空
- 写入授权
- 自定义日志
- 错误和调试
- 异常
- php系统异常及thinkphp5异常机制
- 异常处理
- 抛出异常
- 异常封装
- resful
- 404页面
- 调试模式
- Trace调试
- SQL调试
- 变量调试
- 性能调试
- 远程调试
- 安全
- 输入安全
- 数据库安全
- 上传安全
- 其它安全建议
- xss过滤
- 扩展
- 函数
- 类库
- 行为
- 驱动
- Composer包
- Time
- 数据库迁移工具
- Workerman
- MongoDb
- htmlpurifier XSS过滤
- 新浪SAE
- oauth2.0
- 命令行及生成文件
- 系统现成命令
- 创建类库文件
- 生成类库映射文件
- 生成路由缓存
- 清除缓存文件
- 生成配置缓存文件
- 生成数据表字段缓存
- 自定义命令行
- 开始
- 调用命令
- 杂项
- 助手函数
- URL重写
- 缓存
- 缓存总结
- Session
- Cookie
- 多语言
- 分页
- 上传
- 验证码
- 图像处理
- 文件处理
- 单元测试
- 自定义表单令牌