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();