thinkphp6-模型
模型定义
mysql 生成user表
create table user(
id bigint unsigned NOT NULL AUTO_INCREMENT,
name varchar(150) DEFAULT NULL COMMENT '姓名',
create_time bigint DEFAULT NULL COMMENT '添加时间',
update_time bigint DEFAULT NULL COMMENT '更新时间',
status tinyint DEFAULT NULL COMMENT '状态',
PRIMARY KEY (`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
命令行生成User模型 app/model/User.php
php think make:model User
<?php
declare (strict_types = 1);
namespace app\model;
use think\Model;
/**
* @mixin \think\Model
*/
class User extends Model
{
// 设置当前模型对应的完整数据表名称
protected $table = 'user';
protected $autoWriteTimestamp = true;
}
添加测试数据 app/controller/Index.php
<?php
namespace app\controller;
use app\model\User;
class Index
{
public function index()
{
$user = new User;
$list = [
['name'=>'huyongjian','status'=>1],
['name'=>'huyongjian2','status'=>1],
['name'=>'huyongjian3','status'=>1],
['name'=>'huyongjian4','status'=>1],
['name'=>'huyongjian5','status'=>1],
];
$user->saveAll($list);
}
}
mysql user表数据
mysql> select * from user;
+----+-------------+-------------+-------------+--------+
| id | name | create_time | update_time | status |
+----+-------------+-------------+-------------+--------+
| 1 | huyongjian | 1634525024 | 1634525024 | 1 |
| 2 | huyongjian2 | 1634525024 | 1634525024 | 1 |
| 3 | huyongjian3 | 1634525024 | 1634525024 | 1 |
| 4 | huyongjian4 | 1634525024 | 1634525024 | 1 |
| 5 | huyongjian5 | 1634525024 | 1634525024 | 1 |
+----+-------------+-------------+-------------+--------+
5 rows in set (0.00 sec)
模型新增
添加一条数据
$user = new User;
$user->name = 'huyongjian6';
$user->status = 1;
$user->save();
$user = new User;
$user->save([
'name'=>'huyongjian7',
'status'=>1
]);
批量增加数据
$user = new User;
$list = [
['name'=>'huyongjian','status'=>1],
['name'=>'huyongjian2','status'=>1],
['name'=>'huyongjian3','status'=>1],
['name'=>'huyongjian4','status'=>1],
['name'=>'huyongjian5','status'=>1],
];
$user->saveAll($list);
静态方法
User::create([
'name' => 'huyongjian8',
'status' => 1
]);
模型更新
查询更新
$user = User::find(['id'=>1]);
//$user = User::where('id',1)->find();
$user->name = 'xiaoming';
$user->status = 1;
$user->save();
批量更新
$user = new User;
$list = [
['id'=>1, 'name'=>'小明'],
['id'=>2, 'name'=>'小红']
];
$user->saveAll($list);
静态方法
User::update(['name' => '李四'], ['id' => 1]);
模型删除
$user = User::find(1);
$user->delete();
User::destroy(2);
// 支持批量删除多个数据
User::destroy([1,2,3]);
User::where('id','=',4)->delete();
模型查询
单个数据
User::where('id','=',3)->find();
多个数据
$list =User::where('status', 1)->limit(3)->order('id', 'asc')->select();
// 对数据集进行遍历操作
foreach($list as $key=>$user){
echo $user->name;
}
查询构造器
User::where('id',10)->find();
User::where('status',1)->order('id desc')->select();
User::where('status',1)->limit(10)->select();
字段或者列
// 获取某个用户的积分
User::where('id',10)->value('score');
// 获取某个列的所有值
User::where('status',1)->column('name');
// 以id为索引
User::where('status',1)->column('name','id');
动态查询
// 根据name字段查询用户
$user = User::getByName('huyongjian5');
聚合查询
User::where('status',1)->count();
User::where('status',1)->max('id');
User::where('status',1)->min('id');
User::where('status',1)->avg('id');
Json字段
User模型添加 json字段
// 设置json类型字段
protected $json = ['name'];
获取器
User模型添加获取器
public function getStatusAttr($value)
{
$status = [-1=>'删除',0=>'禁用',1=>'正常',2=>'待审核'];
return $status[$value];
}
测试 控制器 app/controller/Index.php
$user = User::where('id',3)->find();
echo $user->status;
修改器
User模型添加修改器
public function setNameAttr($value)
{
return strtolower($value);
}
控制器 app/controller/Index.php
<?php
namespace app\controller;
use app\model\User;
class Index
{
public function index()
{
// 根据name字段查询用户
$user = User::where('id',3)->find();
$user->name = 'HuYongJian';
$user->save();
}
}
测试后mysql结果
mysql> select * from user where id=3;
+----+------------+-------------+-------------+--------+
| id | name | create_time | update_time | status |
+----+------------+-------------+-------------+--------+
| 3 | huyongjian | 1634525024 | 1634532752 | 1 |
+----+------------+-------------+-------------+--------+
1 row in set (0.00 sec)
自动时间戳
<?php
namespace app\model;
use think\Model;
class User extends Model
{
protected $autoWriteTimestamp = false;
}
// 定义时间戳字段名
protected $createTime = 'create_at';
protected $updateTime = 'update_at';
配置 config/app.php
// 开启自动写入时间戳字段
'auto_timestamp' => 'datetime',
'datetime_field' => 'create_at,update_at',
*/
模型事件
用法
<?php
namespace app\model;
use think\Model;
use app\model\Profile;
class User extends Model
{
public static function onBeforeUpdate($user)
{
if ('thinkphp' == $user->name) {
return false;
}
}
public static function onAfterDelete($user)
{
Profile::destroy($user->id);
}
}
事件
事件 描述 事件方法名
after_read 查询后 onAfterRead
before_insert 新增前 onBeforeInsert
after_insert 新增后 onAfterInsert
before_update 更新前 onBeforeUpdate
after_update 更新后 onAfterUpdate
before_write 写入前 onBeforeWrite
after_write 写入后 onAfterWrite
before_delete 删除前 onBeforeDelete
after_delete 删除后 onAfterDelete
before_restore 恢复前 onBeforeRestore
after_restore 恢复后 onAfterRestore
模型关联
控制器 app/controller/Index.php
<?php
namespace app\controller;
use app\model\User;
class Index
{
public function index()
{
// 根据name字段查询用户
$user = User::where('id',3)->find();
var_dump($user->profile->address);
}
}
User模型添加方法 app/model/User.php
public function profile()
{
return $this->hasOne(Profile::class);
//return $this->hasOne(Profile::class,'user_id','id');
}
Profile模型 app/model/Profile.php
<?php
declare (strict_types = 1);
namespace app\model;
use think\Model;
/**
* @mixin \think\Model
*/
class Profile extends Model
{
//
}
mysql添加profile表
create table profile(
id bigint unsigned NOT NULL AUTO_INCREMENT,
user_id bigint,
address varchar(150) DEFAULT NULL COMMENT '地址',
create_time bigint DEFAULT NULL COMMENT '添加时间',
update_time bigint DEFAULT NULL COMMENT '更新时间',
status tinyint DEFAULT NULL COMMENT '状态',
PRIMARY KEY (`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
profile表添加数据
insert into profile values(1,3,'guangzhou',1,1,1);
profile表数据
mysql> select * from profile;
+----+---------+-----------+-------------+-------------+--------+
| id | user_id | address | create_time | update_time | status |
+----+---------+-----------+-------------+-------------+--------+
| 1 | 3 | guangzhou | 1 | 1 | 1 |
+----+---------+-----------+-------------+-------------+--------+
1 row in set (0.00 sec)
测试与结果
http://127.0.0.1:8000/index
string(9) "guangzhou"

浙公网安备 33010602011771号