一、模型操作

模型里的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;
    }

}

二、模型设置

为了和数据库更好的适配,模型可以提前设置对应的数据库属性

tp6模型isEmpty tp6 模型_User

 

 

 

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;

    }

}