模型定义
模型是model的意思,在mvc架构中的model层,一般指数据库操作 方便管理调用,模型类只有存在独立的业务逻辑或属性时才需要定义User模型类
<?php
namespace app\index\model;
use thinkModel;
class User extends Model{
}确保数据库配置中配置了数据库连接信息
模型自动对应数据表 模型类的命名规则是除去表前缀的数据表名称 驼峰法命名 首字母大写[大驼峰]
| 模型名 | 约定对应数据表(假设数据库前缀是 think_) |
|---|---|
| User | think_user |
| UserType | think_user_type |
规则和系统约定不合
需要设置Model类的数据表名称属性 确保能找到对应的数据表
模型自动对应的数据表名遵循小写+下划线规范 如果表名有大写的情况 必须设置模型的table属性
为避免模型的名称和PHP关键字冲突
启用类后缀功能 在应用配置文件app.php中设置
// 开启应用类库后缀' class_suffix' => true,
所有的应用类库定义时都需要加上对应后缀 包括控制器类
这样app\index\modelUser类定义就要改成
<?php
namespace app\index\model;
use thinkModel;
class UserModel extends Model{
}文件名也要改为UserModel.php
多数情况 不同模块的模型是不需要独立的
可以统一在common模块下面定义模型
模型设置
默认主键为id 如果没使用id作为主键名 需要在模型中设置
namespace app\index\model;
use thinkModel;
class User extends Model{
protected $pk = 'uid';
}指定数据表甚至数据库连接
namespace app\index\model;
use thinkModel;
class User extends Model{
protected $table = 'think_user'; // 设置当前模型对应的完整数据表名称
protected $connection = 'db_config';// 设置当前模型的数据库连接
}connection建议用配置参数名(database.php添加)
而不是具体的连接信息 避免把数据库连接固化在代码里面
常用的模型设置属性(以下属性不是必须设置)
| 属性 | 描述 |
|---|---|
| name | 模型名(默认为当前不含后缀的模型类名) |
| table | 数据表名(默认自动获取) |
| pk | 主键名(默认为id)primary key |
| connection | 数据库连接(默认读取数据库配置) |
| query | 模型使用的查询类名称 |
| field | 模型对应数据表的字段列表(数组) |
模型初始化
模型支持初始化 与控制器的初始化不同
模型的初始化是定义Model的init方法
use thinkModel;
class User extends Model{// 模型初始化
protected static function init(){
//TODO:初始化内容
}
}模型初始化方法通常用于注册模型的事件操作
init必须是静态方法 且只在第一次实例化时候执行
模型操作
模型中除了可调用数据库类的方法之外
可自定义己方法 可把模型看成是数据库的增强版
模型的查询方法无需和数据库查询一样调用table或name方法
因为模型会按照规则自动匹配对应的数据表
Db::name('user')->where('id','>',10)->select();改成模型操作
User::where('id','>',10)->select();区别是查询结果的类型不同
第一种查询结果是(二维)数组
第二种查询结果是包含了模型(集合)的数据集
在大多数情况下 二种返回类型的使用方式无明显区别
模型操作和数据库操作的另外区别是模型支持包括获取器、修改器、自动完成在内的一系列自动化操作和事件
简化了数据的存取操作
但性能有所下降(其实并没下降 而是自动帮你处理了一些原本需要手动处理的操作)
逐步领略到模型的这些特色功能

尊贵的董事大人
英文标题不为空时 视为本栏投稿
需要关键字 描述 英文标题