定义
定义一个模型类
-
- namespace app\index\model;
- use think\Model;
-
- //定义一个User模型类
- class User extends Model{
- //默认主键为自动识别,如果需要指定,可以设置属性
- //protected $pk = 'uid'; //$pk代表主键,primary key的缩写
- }
模型调用的常用两种方法
- public function modelTest(){
- //第一种方法:静态方法
- $userModel = \app\index\model\User::get(1);
- dump($userModel); //返回类型为对象类型
- //第二种方法:实例化模型
- $userModel = new \app\index\model\User;
- $userModel->name('admin');
- //dump($userModel); //返回类型为对象类型
- }
官方文档中其他两种
拓展
前后端页面中的success方法和api中的success方法不同
不同点:
前后端页面显示的success方法success()
/** * 操作成功跳转的快捷方法 * @access protected * @param mixed $msg 提示信息 * @param string $url 跳转的 URL 地址 * @param mixed $data 返回的数据 * @param int $wait 跳转等待时间 * @param array $header 发送的 Header 信息 * @return void * @throws HttpResponseException */ protected function success($msg = '', $url = null, $data = '', $wait = 3, array $header = []){}api中的success()
/** * 操作成功返回的数据 * @param string $msg 提示信息 * @param mixed $data 要返回的数据 * @param int $code 错误码,默认为1 * @param string $type 输出类型 * @param array $header 发送的 Header 信息 */ protected function success($msg = '', $data = null, $code = 1, $type = null, array $header = []) { $this->result($msg, $data, $code, $type, $header); }
模型的初始化
模型同样支持初始化,与控制器的初始化不同的是,模型的初始化是重写Model
的initialize
还可以使用init()静态方法
- protected static function init(){
- //自定义静态初始化方法
- }
与数据库操作基本相似,模型对应mvc中的m是用来操作数据库的
新增
- public function modelTest1(){
- //使用实例化方法进行新增
- $userModel = new \app\index\model\User;
- $userModel->username = 'zhangsan';
- $userModel->save();
- dump($userModel->id);//获取自增id
- }
静态方法
- //新增数据
- public function modelTest1(){
- //静态方法
- $user = \app\index\model\User::create([
- 'username' => 'thinkphp',
- 'email' => 'thinkphp@qq.com'
- ]);
- dump($user->username);
- dump($user->email);
- dump($user->id); // 获取自增ID
- }
更新
我觉得官方文档比我描述的更仔细
其中需要注意的点是save()在模型处理中可用作更新也可用作保存
- //save()更新数据与保存数据
- public function modelTest2(){
- //保存数据
- $userModel = new \app\index\model\User;
- $userModel->username = 'lisi';
- $userModel->save();
- //修改数据
- //其一:查找并更新
- $user = \app\index\model\User::get(2);
- $user->username = 'thinkphp';
- $user->email = 'thinkphp@qq.com';
- $user->save();
- //其二:直接更新数据
- $user = new User;
- // save方法第二个参数为更新条件
- $user->save([
- 'name' => 'thinkphp',
- 'email' => 'thinkphp@qq.com'
- ],['id' => 1]);
- }
删除官方文档模型删除
删除模型
- $user = User::get(1);
- $user->delete();
根据id删除字段
- User::destroy(1);
- // 支持批量删除多个数据
- User::destroy('1,2,3');
- // 或者
- User::destroy([1,2,3]);
查询
与数据库的查询相差无异,官方文档模型查询
- // 获取某个用户的积分
- User::where('id',10)->value('score'); //value():单条字符串类型数据,跟find()方法类似
- // 获取某个列的所有值
- User::where('status',1)->column('name'); //column():返回数据集为索引数组,跟select()相似
聚合(模型聚合查询)