thinkphp5 model模型操作数据库

model的使用

1.定义

2.一般model的名字和表名是对应的,例如

表名 pre_user -> 模型名 User.php
表名 pre_user_info -> 模型名 UserInfo.php

3.表名和数据模型定义名不一致需要额外定义

class User extends Model
{
	// 设置相关的数据表
	protected $table = "admin_user";
}

4.4种调用模型的方法

//先导入定义的数据模型类
use \app\index\model\User;

(1)	$res = User::get(1)

(2)	$user = new User;
$res = $user::get(1);	

(3)	use think\Loader;
$user = Loader::model("User");
$res = $user::get(1);

(4)	$user = model("User);       
$res = $user::get(1);

查询

  1. get 获取一条记录

     $res = Student::get(1);	
    
  2. all 获取多条记录

     $res = Student::all('1, 2, 3');
     $res = Student::all([1, 2, 3]);
    
  3. find 查询某一条

     $res = Student::where('id', '=', '1')
     	->field('name')
    		->find();
    
  4. select 多条查询

     $res = Student::where('id', '>=', '1')
         ->field('name')
         ->limit(2)
         ->order('id DESC')
         ->select();
    
  5. value 按字段查询一条

     $res = Student::where('id', '>=', '1')
         ->value('name');
    

    注: $res = $res->toArray();//将结果转换成数组

  6. 查询数目

     # count sum avg max min
     $res = Student::count();
     $res = Student::where('id', '>', 3)
         ->count();
    

添加

  1. 简单的添加

     $res = Student::create([
         'name'      => 'tom',
         'age'       => 23,
         'sex'       => 2,
         'password'  => '123457'
     ]);
    
  2. 实例化方式

     $student = new Student;
     $student->name =  '王大锤';
     $student->age =  23;
     $student->save();
    
  3. 实例化方式过滤插入字段,返回插入行数

     $student = new Student;
     $data = [
         'name' => '王大锤',
         'age' => 23,
         'email' => '[email protected]'
     ];
     $res = $student->allowField(['name', 'age'])
         ->save($data);
    
  4. saveAll添加多条数据 返回对象列表

     $student = new Student;
     $data = [
         [
             'name' => '王大锤',
             'age' => 23,
             'email' => '[email protected]'
         ],
         [
             'name' => '王二锤',
             'age' => 23,
             'email' => '[email protected]'
         ]
     ];
     $res = $student->allowField(['name', 'age'])
         ->saveAll($data);
    

更新

  1. update 返回影响行数 (推荐)

     $res = Student::where(['id'=>5])
         ->update([
             'name'=>'Jack'
         ]);
         
      // score 字段加 5
     Student::where(['id'=>5])->setInc('score', 5);
     
     // score 字段减 5
     Student::where(['id'=>5])->setDec('score',5);
    
  2. 批量更新 数据中要含有主键,返回更新对象列表

     $student = new Student;
     $res = $student->saveAll([
         ['id'=>1, 'name' => 'MIMI'],
         ['id'=>2, 'name' => 'MIMI']
     ]);
    

删除

  1. 传入主键,返回影响行数

     $res = Student::destroy(1);
    
  2. 传入条件,返回影响行数

     $res = Student::destroy(['id'=>2]);
    
  3. 条件删除 返回影响行数

     $res = Student::where(['id'=>5])
     	->delete();
    

事务回滚

(1)自动控制事务处理

Db::transaction(function(){ 
	Db::table('think_user')->find(1); 
	Db::table('think_user')->delete(1); 
});

(2)手动控制事务

Db::startTrans();		//启动事务
try {
	AgentSetting::where('id',$id)->setInc('number',1);
	Db::commit();		//提交事务
} catch (Exception $e) {
	Db::rollback();		//回滚
	return json(['code'=>'0','error'=>$e->getMessage()]);
}

模型修改器和自动完成

auto (新增及更新的时候自动完成的属性数组)
insert(仅新增的时候自动完成的属性数组)
update(仅更新的时候自动完成的属性数组)

读取器的命名规范是 -> get + 属性名的驼峰命名 + Attr
修改器的命名规范是 -> set + 属性名的驼峰命名 + Attr

1. 定义
	 'tom',
	    'age'       => 23,
	    'sex'       => 2,
	    'password'  => '123457'
	]);

自动更新时间

  1. 在数据库配置文件中设置

     // 自动写入时间戳字段
     'auto_timestamp'  => true,
    
  2. 自动操作字段

     Model中设置
     # 默认字段update_time create_time
     protected $autoWriteTimestamp = True;  // 开启自动时间戳
     protected $createTime = 'create_time'; // 可自定义时间字段名
     protected $updateTime = 'update_time'; // 关闭 false
     注:当创建和更新数据时,数据的create_time和update_time字段会被写入操作的时间
    

软删除

  1. 在数据库配置文件中设置

     // 自动写入时间戳字段
     'auto_timestamp'  => true,
    
  2. 开启软删除

     
  3. 调用

     Student::where(['id'=>5])->delete();//软删除
     Student::where(['id'=>5])->delete(true);//真正删除
    
  4. 查询已软删除的数据
    $res = Student::withTrashed(true)->find(1);
    查询仅包含已软删除的数据
    $res = Student::onlyTrashed()->select();

如果您觉得本篇内容不错,可以点个关注,给个赞

你可能感兴趣的:(php学习笔记)