thinkphp6模型
一、模型操作
模型里的Admins::也可以用static::关键词
链式操作,都可以在模型中使用
controller公用示例 namespace app\index\controller; use app\BaseController; //我们用模板不需要到文件名,只需要到文件夹,不需要后面的Admins。 //如下所示,我们使用模型时,需要到文件名,即Admins.php use app\index\model\Admins; class Index extends BaseController { public function index() { $db= new Admins(); $index = $db->GetAdmin(); dump($index); } }
1、模型查询数据
- find获取单条数据,返回的是当前模型的对象实例。但是controller返回的是一个数组。
model示例 namespace app\index\model; //使用model模块,tp框架自带的。 use think\Model; class Admins extends Model{ public function GetAdmin(){ $find = Admins::find(2); // $find = Admins::where('id',2)->find(); return $find; } }
- select获取多条数据,返回的是当前模型的对象实例。
model示例 namespace app\index\model; //使用model模块,tp框架自带的。 use think\Model; class Admins extends Model{ public function GetAdmin(){ $select = Admins::select(); // $select = Admins::select([1]); // $select = static ::where('id','>',1) // ->select(); return $select; } }
- value获取单个字段数据
model示例 namespace app\index\model; //使用model模块,tp框架自带的。 use think\Model; class Admins extends Model{ public function GetAdmin(){ $select = Admins::where('id','>',1) ->value('username'); return $select; } }
- column获取一列字段数据返回的是一个数组
model示例 namespace app\index\model; //使用model模块,tp框架自带的。 use think\Model; class Admins extends Model{ public function GetAdmin(){ $select = Admins::column('username'); //$select = Admins::column('username','id'); return $select; } }
2、模型增加数据
- create静态方法添加数据,返回的是当前模型的对象实例
model示例
namespace app\index\model;
//使用model模块,tp框架自带的。
use think\Model;
class Admins extends Model{
public function GetAdmin(){
$create = Admins::create([
'username' => 'uzi',
'password' => md5(5556666),
'truename' =>'污渍'
]);
echo $create->id;
return $create;
}
}
3、模型修改数据
- update静态方法修改数据,返回的是当前模型的对象实例
namespace app\index\model; //使用model模块,tp框架自带的。 use think\Model; class Admins extends Model{ public function GetAdmin(){ $update=Admins::update( ['username' =>'xiaohu'], ['id' =>1] ); return $update; } }
4、模型删除数据
- delete静态方法删除数据,返回的是当前模型的对象实例
model示例 namespace app\index\model; //使用model模块,tp框架自带的。 use think\Model; class Admins extends Model{ public function GetAdmin(){ $delete=Admins::where('id',1) ->delete(); return $delete; } }
二、模型设置
为了和数据库更好的适配,模型可以提前设置对应的数据库属性

model示例 namespace app\index\model; use think\Model; class Admins extends Model{ protected $name ='User'; //修改默认表名Admins为user protected $table='user'; //修改当前主键名为uid protected $pk='uid'; public function GetAdmin(){ $select =static::select();//这里只能用static调用本类方法,使用Admins或User会报错 return $select; } }
schema设置模型对应数据表字段及类型。默认会自动获取(包括字段类型),但自动获取会导致增加一次查询。
类型根据php数据类型定义,如果是json类型直接定义为json即可。
model示例 namespace app\index\model; use http\Client\Curl\User; use think\Model; class Admins extends Model{ protected $name ='User'; //修改默认表名Admins为user protected $table='user'; //修改当前主键名为uid protected $pk='uid'; protected $schema =[ 'uid' => 'int', 'u_name'=>'string' ]; public function GetAdmin(){ $select =static::select(); return $select; } }
disuse数据表废弃字段(数组)。去掉表中不需要的字段。
model示例 namespace app\index\model; use http\Client\Curl\User; use think\Model; class Admins extends Model{ protected $name ='User'; //修改默认表名Admins为user protected $table='user'; //修改当前主键名为uid protected $pk='uid'; protected $disuse=['phone','sex','age','status']; public function GetAdmin(){ $select =static::select(); return $select; } }
5、模型实例化
模型可以使用静态访问,也可以使用new实例化
save添加或修改数据,返回成功或失败。
要实例话user,必须要有user的模型文件
model实例 namespace app\index\model; use think\Model; class Admins extends Model{
public function add(){
$user = new User; $save = $user->save( [ 'phone'=>'15236458794', 'u_name'=>'可爱', 'sex'=>1, 'age'=>16 ] ); return $save; } }
在admin模型里调用其他表,可以用new实例化的方法,执行其他表
执行本文件里的数据库,直接静态访问 Admins::
save删除数据
model示例 namespace app\index\model; use think\Model; class Admins extends Model{ public function edit(){ $user = new User; $list = [ 'phone'=>'15111658794', 'u_name'=>'可怜', 'sex'=>2, 'age'=>16 ]; //如果主键是id,就可以写到list数组中 //如果主键不是id,就只能用where条件 $save =$user->where(['uid'=>22])->save($list); return $save; } }
saveAll批量添加或修改数据
批量更新能根据主键值进行更新,如果主键不是id就不能用
6、模型获取器
获取器的作用是对模型实例的数据做出自动处理
命名规则:get+字段名+Attr
字段名是数据表字段的驼峰转换
model示例 namespace app\index\model; use think\Model; class Admins extends Model{ public function index(){ $user = Admins::find(2); return $user; } //自动将状态值传入$v public function getStatusAttr($v){ $status=[0=>'禁用',1=>'开启']; return $status[$v]; } }
controller示例 namespace app\index\controller; use app\BaseController; //我们用模板不需要到文件名,只需要到文件夹,不需要后面的Admins。 //如下所示,我们使用模型时,需要到文件名,即Admins.php use app\index\model\Admins; class Index extends BaseController { public function index() { $db= new Admins(); $index = $db->index(); dump($index); print_r($index->status); } }
7、模型修改器
修改器的主要作用是对模型设置的数据对象值进行处理
命名规则;set + 字段名 +Attr
model示例 namespace app\index\model; use think\Model; class Admins extends Model{ public function index(){ $admins = Admins::create([ 'username'=> 'WASD', 'password'=>md5('89546'), 'truename'=>'晚上' ]); return $admins; } public function setUsernameAttr($v){ return strtolower($v);//账户只能小写 } }
controller示例 namespace app\index\controller; use app\BaseController; //我们用模板不需要到文件名,只需要到文件夹,不需要后面的Admins。 //如下所示,我们使用模型时,需要到文件名,即Admins.php use app\index\model\Admins; class Index extends BaseController { public function index() { $db= new Admins(); $index = $db->index(); dump($index); } }
8、模型搜索器
搜索器的作用是 用于封装字段(或者搜索标识)的查询条件表达式
命名规则:search+字段名+Attr
model示例 namespace app\index\model; use think\Model; class Admins extends Model{ public function index(){ $admins = Admins::withSearch( [ 'username'], ['username'=>'admi' ])->select(); return $admins; } public function searchUsernameAttr($query,$v){ $query->where('username','like',$v.'%'); } }
9、模型检查数据
如果要判断数据集是否为空,不能直接使用empty判断
必须使用数据集对象的isEmpty方法判断
model示例 namespace app\index\model; use think\Model; class Admins extends Model{ public function index(){ $admins = Admins::where('username','1') ->select(); //程序会直接输出222,说明empty在model里无法检测出是否为数据集为空 //可以使用isEmpty来检测。 if(empty($admins)){ echo 111; } if($admins->isEmpty()) { echo 222; } } }
10、模型只读字段
namespace app\index\model; use think\Model; class Admins extends Model{ //username此时设为只读 //所以 username无法修改 protected $readonly =['username']; public function index(){ $admins=Admins::update(['username'=>'德莱文'],['id'=>3]); return $admins; } }
11、模型软删除
- 软删除功能,需要引入softDelete
- 需要创建一个delete_time字段
- 软删除的删除操作仅对模型的删除方法有效
model示例 namespace app\index\model; use think\Model; use think\model\concern\SoftDelete; class Admins extends Model{ use SoftDelete; protected $deleteTime='delete_time';//软删除标记字段 protected $defaultSoftDelete=0;//软删除字段的默认值 public function index(){ //删除id为3的数据 在delete_time后面添加时间戳。 $admins=Admins::destroy(3); //删除成功返回true return $admins; } }

浙公网安备 33010602011771号