一、模型操作
模型里的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;
}
}