ThinkPHP6.0学习笔记-模型操作

ThinkPHP模型 模型定义

在app目录下创建Model目录,即可创建模型文件

定义一个和数据库表相匹配的模型

use think\Model; class User extends Model { }

User会自动匹配对于数据库中的数据表tp_user

模型命名后缀,是为了防止关键字冲突,可以开启应用类后缀:创建Class UserModel

use think\Model; class UserModel extends Model { //指向数据表 protected $name = \'user\'; protected $table = \'tp_user\'; }

模型类的定义需要去除表前缀,采用驼峰式命名首字母大写

tp_user ==> User tp_user_type ==> UserType

创建于数据表相匹配的模型类后,可以在使用User::*方法来调用数据库进行操作

namespace app\controller; use think\facade\Db; use app\model; class DataTest { public function index() { $user = model\User::select(); return json($user); } } 设置模型

模型中默认的主键为id,也可以在模型类中设置主键字段名$pk

protected $pk = \'uid\';

在控制器中调用模型操作,发生重名可以设置别名

use app\model\User as UserModel;

模型类中可以定义指向数据库表

protected $table = \'tp_user\'; //包含前缀 protected $name = \'user\'; //不含前缀

模型类初始化操作(控制器也有),但是必须设置static静态方法

protected static funtion init() { echo "初始化"; }

模型设置属性:

属性 描述
name   指向数据表名(无前缀),默认为当前模型名  
table   数据表  
suffix   数据表后缀(默认为空)  
pd   设置数据表主键字段名(默认为id)  
connection   数据库连接(默认加载数据库配置database.php)  
query   模型使用的查询类名称  
field   指定允许操作的字段(支持数组)  
schema   模型对应数据表字段和类型  
type   模型需要自动转换的字段和类型  
strict   是否严重区分字段大小(默认true)  
disuse   数据表废弃字段  
模型字段

模型的数据字段和对应的数据表字段是对应的,默认会自动获取(以及类型),自动获取的过程会加一次查询操作(浪费资源),thinkphp支持自定义字段信息。

$schema = [ \'[字段名]\' => \'[字段类型]\'; ]

schema需要定义整个数据表字段,对单个字段定义需要自动转换的类型可以使用type

如果需要废弃(忽略)数据表中的字段,可以使用$disuse来定义

protected $disuse = [‘type’,\'status\'];

获取数据

$user = User::find(1); echo $user->create_time; echo $user->name;

由于模型类实现了ArrayAccess接口,所以可以当成数组使用。

$user = User::find(1); echo $user[\'create_time\']; echo $user[\'name\'];

如果你是在模型内部获取数据的话,需要改成:

$user = $this->find(1); echo $user->getAttr(\'create_time\'); echo $user->getAttr(\'name\');

模型赋值、 实例化

给模型对象赋值

$user = new User() ; $user->table = \'tp_user\'; $user->score = 100 ;

上述代码会将模型对象打包赋值给$user,可以对其封装的模型对象进行操作“修改器”

同时也可以使用

$data[\'name\'] = \'thinkphp\'; $data[\'score\'] = 100; $user = new User($data);

或者使用

$user = new User(); $data[\'name\'] = \'thinkphp\'; $data[\'score\'] = 100; $user->data($data);

data方法支持使用修改器

$user = new User(); $data[\'name\'] = \'thinkphp\'; $data[\'score\'] = 100; $user->data($data, true);

如果需要对数据进行过滤,可以使用

$user = new User(); $data[\'name\'] = \'thinkphp\'; $data[\'score\'] = 100; $user->data($data, true, [\'name\',\'score\']);

表示只设置data数组的name和score数据。

最佳操作实践 新增操作:

新增数据的最佳实践原则:使用create静态方法新增数据,使用saveAll批量新增数。

删除操作:

删除的最佳实践原则是:如果删除当前模型数据,用delete方法,如果需要直接删除数,使用destroy静态方法。

更新操作:

更新的最佳实践原则是:如果需要使用模型事件,那么就先查询后更新,如果不需要使用事件或者不查询直接更新,直接使用静态的Update方法进行条件更新,如非必要,尽量不要使用批量更新。

新增-save()

模型数据的新增和数据库的新增数据有所区别,数据库的新增只是单纯的写入给定的数据,而模型的数据写入会包含修改器、自动完成以及模型事件等环节,数据库的数据写入参考数据库章节。

第一步:实例化模型对象

$user = new UserModel(); $user = new \app\model\UserModel();

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzdsyy.html