1. 常见事项
- 一般数据表都是共用的,我们直接将模型定义在一共公用的模块 common 模块就行了。
- 模型会自动对应数据表,模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写,例如:user => User
- 模型自动对应的数据表名称都是遵循小写+下划线规范,如果你的表名有大写的情况,必须通过设置模型的table属性。
- 如果担心模型的名称和PHP关键字冲突,可以启用类后缀功能,只需要在应用配置文件
app.php中设置:- 开启后,所有的应用类库定义的时候都需要加上对应后缀,包括控制器类。
- // 开启应用类库后缀
- ‘class_suffix’ => true,
- 修改后类名和类文件名称都要修改
2. 模型定义
在模块下新建 model 文件夹,在这个文件夹下创建 PHP 类,使类名称和数据表表名称构成一种映射关系。如下:
<?phpnamespace app\common\model;use think\Model;class User extends Model{}
3. 模型设置
默认主键为id,如果你没有使用id作为主键名,需要在模型中设置属性,其实无论是不是使用了 id 作为主键,都应该标记一下使用的主键
5.1中模型不会自动获取主键名称,必须设置pk属性。
<?phpnamespace app\common\model;use think\Model;class User extends Model{// 使用的主键protected $pk = 'id';}
如果你想指定数据表甚至数据库连接的话,可以使用:
<?phpnamespace app\common\model;use think\Model;class User extends Model{// 数据库连接protected $connection = 'db_config3';// 对应的数据表protected $table = 'user';// 使用的主键protected $pk = 'id';}
4. 模型初始化
模型同样支持初始化,与控制器的初始化不同的是,模型的初始化是定义Model的init方法:
<?php// 模型初始化protected static function init(){// TODO:初始化内容}
注意问题:
- 模型的初始化方法,必须是一个静态的方法,只在第一次实例化的时候执行该方法
- 模型的初始化方法,通常用来注册模型事件
5. 模型操作
模型是DB的增强版,除了可以使用数据库的方法外,还可以使用自定义的方法
下面是一个使用的完整的例子
模型:
<?phpnamespace app\common\model;use think\Model;class User extends Model{// 数据库连接protected $connection = 'db_config3';// 对应的数据表protected $table = 'user';// 对应的主键protected $pk = 'id';// 模型初始化protected static function init(){// TODO:初始化内容}}
控制器中使用模型:
<?phpnamespace app\test\controller;use think\Controller;use app\common\model\User as UserModel;class User extends Controller{public function fun1(){$data = UserModel::where('id','=',1)->select();return json($data);}}
postman 测试:
