1. 常见事项

  • 一般数据表都是共用的,我们直接将模型定义在一共公用的模块 common 模块就行了。
  • 模型会自动对应数据表,模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写,例如:user => User
  • 模型自动对应的数据表名称都是遵循小写+下划线规范,如果你的表名有大写的情况,必须通过设置模型的table属性。
  • 如果担心模型的名称和PHP关键字冲突,可以启用类后缀功能,只需要在应用配置文件app.php中设置:
    • 开启后,所有的应用类库定义的时候都需要加上对应后缀,包括控制器类。
    • // 开启应用类库后缀
    • ‘class_suffix’ => true,
    • 修改后类名和类文件名称都要修改

2. 模型定义

在模块下新建 model 文件夹,在这个文件夹下创建 PHP 类,使类名称和数据表表名称构成一种映射关系。如下:

  1. <?php
  2. namespace app\common\model;
  3. use think\Model;
  4. class User extends Model
  5. {
  6. }

3. 模型设置

默认主键为id,如果你没有使用id作为主键名,需要在模型中设置属性,其实无论是不是使用了 id 作为主键,都应该标记一下使用的主键
5.1中模型不会自动获取主键名称,必须设置pk属性。

  1. <?php
  2. namespace app\common\model;
  3. use think\Model;
  4. class User extends Model
  5. {
  6. // 使用的主键
  7. protected $pk = 'id';
  8. }

如果你想指定数据表甚至数据库连接的话,可以使用:

  1. <?php
  2. namespace app\common\model;
  3. use think\Model;
  4. class User extends Model
  5. {
  6. // 数据库连接
  7. protected $connection = 'db_config3';
  8. // 对应的数据表
  9. protected $table = 'user';
  10. // 使用的主键
  11. protected $pk = 'id';
  12. }

4. 模型初始化

模型同样支持初始化,与控制器的初始化不同的是,模型的初始化是定义Modelinit方法:

  1. <?php
  2. // 模型初始化
  3. protected static function init()
  4. {
  5. // TODO:初始化内容
  6. }

注意问题:

  1. 模型的初始化方法,必须是一个静态的方法,只在第一次实例化的时候执行该方法
  2. 模型的初始化方法,通常用来注册模型事件

5. 模型操作

模型是DB的增强版,除了可以使用数据库的方法外,还可以使用自定义的方法

下面是一个使用的完整的例子

模型:

  1. <?php
  2. namespace app\common\model;
  3. use think\Model;
  4. class User extends Model
  5. {
  6. // 数据库连接
  7. protected $connection = 'db_config3';
  8. // 对应的数据表
  9. protected $table = 'user';
  10. // 对应的主键
  11. protected $pk = 'id';
  12. // 模型初始化
  13. protected static function init()
  14. {
  15. // TODO:初始化内容
  16. }
  17. }

控制器中使用模型:

  1. <?php
  2. namespace app\test\controller;
  3. use think\Controller;
  4. use app\common\model\User as UserModel;
  5. class User extends Controller
  6. {
  7. public function fun1()
  8. {
  9. $data = UserModel::where('id','=',1)->select();
  10. return json($data);
  11. }
  12. }

postman 测试:
image.png