小周 2020-04-25
模型会自动对应数据表,模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写。
namespace app\index\model;
设置数据表
use think\Model; class User extends Model{ // 设置当前模型对应的完整数据表名称 protected $table = ‘think_user‘; // 主键默认是自动识别的,如果需要指定 protected $pk = ‘uid‘; }
模型调用
// 实例化模型 $user = new User; $user->name= ‘thinkphp‘; $user->save(); // 或者使用助手函数`model` $user = model(‘User‘); $user->name= ‘thinkphp‘; $user->save();
模型的初始化是重写Model的initialize
//自定义初始化 protected function initialize() { //需要调用`Model`的`initialize`方法 parent::initialize(); }
新增
$user = new User; $user->name = ‘thinkphp‘; $user->email = ‘‘; $user->save();
也可以使用data方法批量赋值:
$user = new User; $user->data([ ‘name‘ => ‘thinkphp‘, ‘email‘ => ‘‘]); $user->save();
添加多条数据
$user = new User; $list = [ [‘name‘=>‘thinkphp‘,‘email‘=>‘‘], [‘name‘=>‘onethink‘,‘email‘=>‘‘]]; $user->saveAll($list);
saveAll方法新增数据默认会自动识别数据是需要新增还是更新操作,当数据中存在主键的时候会认为是更新操作;
查找并更新
$user = User::get(1); $user->name = ‘thinkphp‘; $user->email = ‘‘; $user->save();
直接更新数据
$user = new User;// save方法第二个参数为更新条件 $user->save([ ‘name‘ => ‘thinkphp‘, ‘email‘ => ‘‘] ,[‘id‘ => 1]);
静态方法
User::where(‘id‘, 1) ->update([‘name‘ => ‘thinkphp‘]);
或者使用:
User::update([‘id‘ => 1, ‘name‘ => ‘thinkphp‘]);
删除模型数据,可以在实例化后调用delete方法。
$user = User::get(1); $user->delete();
或者通过数据库类的查询条件删除
User::where(‘id‘,‘>‘,10)->delete();
查询
获取单个数据
取出主键为1的数据 $user = User::get(1); echo $user->name;
或者在实例化模型后调用查询方法
$user = new User();// 查询单个数据 $user->where(‘name‘, ‘thinkphp‘) ->find();
在实例化模型后调用查询方法
$user = new User();// 查询数据集 $user->where(‘name‘, ‘thinkphp‘) ->limit(10) ->order(‘id‘, ‘desc‘) ->select();
聚合
$user = new User; $user->count(); $user->where(‘status‘,‘>‘,0)->count(); $user->where(‘status‘,1)->avg(‘score‘); $user->max(‘score‘);
获取器
获取器的作用是在获取数据的字段值后自动进行处理,例如,我们需要对状态值进行转换,可以使用:
class User extends Model { public function getStatusAttr($value) { $status = [-1=>‘删除‘,0=>‘禁用‘,1=>‘正常‘,2=>‘待审核‘]; return $status[$value]; }}
数据表的字段会自动转换为驼峰法,一般status字段的值采用数值类型,我们可以通过获取器定义,自动转换为字符串描述。
获取器还可以定义数据表中不存在的字段,例如:
class User extends Model { public function getStatusTextAttr($value,$data) { $status = [-1=>‘删除‘,0=>‘禁用‘,1=>‘正常‘,2=>‘待审核‘]; return $status[$data[‘status‘]]; }}
获取器方法的第二个参数传入的是当前的所有数据数组。