1 获得模型
先定义模型 User
User::get(1);
//获得id=1的User
$user2=new User;
$user2::get(2);
//获得id=2的User
$user3=Loader::model("User");
$user3::get(3)
//获得id=3的User
//需要use think\Loader
//可以多个模型
$user4=model("User");
$user4::get(4)
//获得id=4的User
//助手函数,不需要use think\Loader
2 模型查询
$user=User::get(1);
$user=$user->toArray();
//获得id=1的User
//获得数据
$data=User::get(function($query){
$query->where("id","eq",1);
})
$data=$data->toArray();
//获得数据
$data=User::where("id",10)
->field("id,name,age")
->find()
//链式操作
$data=User::all("1,2,3");
foreach($data as $val){
dump($val->toArray());
}
3 模型添加
User::create([
'name'=>'smith',
'age'=>30,
'email'=>'smith@qq.com'
])
User::create([
'name'=>'smith',
'age'=>30,
'email'=>'smith@qq.com',
'book'=>'thinkphp'
],true)
//这里true可以防止插入不存在的book字段而报错
$user=new User;
$user->name='Joy';
$user->age=24;
$user->save();
$user=new User;
$user->save([
'name'=>'robot',
'age'=>22
])
$user=new User;
$user
->allowField(true)//过滤不存在的数据字段
->save([
'name'=>'robot',
'age'=>22,
'book'=>'c#'
])
$user=new User;
$user
->allowField(['name'])//只插入name字段值,并且过滤不存在的数据字段
->save([
'name'=>'robot',
'age'=>22,
'book'=>'c#'
])
同样还有
$user->saveAll($list)方法,插入多条数据,可以仅仅部分字段,返回每个model
4 更新数据
User::update([
'id'=>1,
'name'=>'Gog'
])
//更新ID=1的数据
User::update([
'id'=>1,
'name'=>'BOOB'
],['id'=>2])
//更新ID=2的数据
User::update([
'id'=>1,
'name'=>'Higo'
],function($query){
$query->where("id","=",5)
})
//更新ID=5的数据
User::where("id","=",6)
->update([
'name'=>'Clop'
])
//返回更新的行数,如果同样的代码再次执行,返回0
$user->User::get(1);
$user->name='Tom';
$user->save();
//返回更新的行数,如果同样的代码再次执行,返回0
$user->new User;
$user->save([
'name'='Jack'
],['id]=>9])
//返回更新的行数,如果同样的代码再次执行,返回0
$user->new User;
$user->save([
'name'='Jack'
],function($query){
$query->where('id','<','10');
})
//更新<10的
$user->new User;
$user->saveAll([
['id'=>1,'name'=>'Pick''],
['id'=>2,'name'=>'Tomas']
]);
//更新多个,刷新同样执行
5 删除数据
User::destroy(1);
//返回删除的行数,如果同样的代码再次执行,返回0
User::destroy(['id'=>1]);
//效果一样
User::destroy(function($query){
$query->where('id','<',5);
});
//删除<5的所有user
$user=User::get(6);
$user->delete();
User::where('id',8)
->delete();
6 聚合操作
User::count();
统计数量
User::where('id','>',5)->count();
//统计
max()//取得最大值
min()//最小值
sum()//求和
avg()//平均值
7 模型显示属性格式化
在model代码中:User.php,定义个性别获取器
public function getSexAttr($val){
switch($val){
case '1':
return '女';
break;
case '2':
return '男';
break;
default:
return '未设置';
break;
}
}
设置后,模型中性别栏自动显示为 男 女 或 未设置
$data->User::get(1);
dump($data->toArray());
//这样输出的结果是格式化后的数据
如果希望还是显示数字0,1,2使用的是:
$data->User::get(1);
dump($data->getData());
8 模型修改器
在model代码中:User.php,定义个密码修改器
public function setPasswordAttr($val){
return md5($val);
}
这样在插入操作的时候,不需要显示在代码中加密,它会自动修改;
特别的,如果这个方法有第二个参数。
/*
* User类密码修改器
* @param $val 表示传入的密码值
* @param $data 表示传入的整个model
*/
public function setPasswordAttr($val,$data){
// $data['age'] //得到年龄
}
9 模型自动完成
在model代码中:User.php,定义个auto数组,里面填上需要自动完成的字段;
protected $auto=['time'];
再定义一个set方法
public function setTimeAttr()
{
return time();
}
protected $insert=[];//只在插入有效
protected $update=[];//只在更新有效
10 模型时间戳
在model代码中:User.php,有两个字段create_time和update_time
protected $autoWriteTimestamp=true;
当前模型的时间会自动填写。
如果字段名称不是这两个则需要在模型中声明,假设当前字段名为create_on和update_on
则需要补充代码如下
protected $createTime='create_on'; //这里填写的是字段名,如果是填写false,表示不开启
protected $updateTime='update_on';
这样就好了
11 软删除
在数据中添加字段delete_time,允许为null
①在模型中引入函数
use traits\model\SoftDelete;
②在模型体中
use SoftDelete;
③此时如果只选 User::destory(1),数据不直接删除,而是记录了deleteTime
④虽然数据不删除,如果使用User::get(1),返回的是Null
⑤如果需要获得软删除的数据需要User::withTrashed(true)->find(1);
⑥如果只想要软删除的数据User::onlyTrashed()->where();
同样如果字段名称不是delete_time,也是rotected $createTime='delete_on';的设置
如果设置了软删除,要真的删除
方法①
User::destory(1,true) //直接删除
方法②
$user=User::get(1);
$user->delete(true);
如果要去掉软删除标志,则update 删除字段的时间为null即可