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