Thinkphp6(6)模型学习与知识总结(二)
Thinkphp6(6)模型学习与知识总结(二)
上一次学习了模型,对模型有一点小认识,今天再来学习一下,我一开始是没有想到要学习模型,原因是CURD(增删改查)中很多可以用Db类在控制器中完成,其实模型有很多好东西的,今天就来学习一下,今天从0开始来,所有的代码都是放在此,以后可用到。
本次学习想学习的内容
1.增删改查--静态方法create
2.增删改查--自动消除多余的字段的方法allowfield和save
3.软删除
4.自动时间戳
下面先做一些准备
一、建立一个数据库
CREATE TABLE mytp_users (
id int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
user_name varchar(255) DEFAULT NULL COMMENT '姓名',
user_idcard varchar(18) DEFAULT NULL COMMENT '身份证号',
user_password varchar(32) DEFAULT NULL COMMENT '密码',
user_school varchar(32) DEFAULT NULL COMMENT '学校',
user_mobile varchar(11) DEFAULT NULL COMMENT '手机号',
user_email varchar(255) DEFAULT NULL COMMENT '电子邮件',
user_qq varchar(20) DEFAULT NULL COMMENT 'QQ号',
user_status int(2) DEFAULT NULL COMMENT '状态',
create_time int(10) DEFAULT NULL COMMENT '创建时间',
update_time int(10) DEFAULT NULL COMMENT '更新时间',
delete_time int(10) DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;
二、再建立一个模型
<?php
namespace app\model;
use think\Model;
use think\model\concern\SoftDelete;
//use think\facade\Db;
/**
*
*/
class Users extends Model
{
protected $name = 'Users';
protected $table = 'mytp_Users';
//开了软删除功能
use SoftDelete;
protected $deleteTime = 'delete_time';
//开启自动时间戳
protected $autoWritetamp=true;
/* public function create($data)
{
$create=Users::create($data);
return $create;
}*/
}
三、在控制器中建立一个控制器Userstest.php
<?php
namespace app\controller;
use app\BaseController;
use think\facade\Db;
use app\model\Users;
class Userstest extends BaseController
{
private $name=['杨过','小龙女','孙婆婆','李莫愁','林玉','公孙止','裘千尺','公孙绿萼','武三娘','武敦儒','武修文','郭芙','郭襄','郭破虏','耶律齐','耶律燕','完颜萍','何师我','陆展元','何沅君','陆无双','陆立鼎','陆二娘','程英','忽必烈','金轮法王','霍都','达尔巴','藏边五丑','潇湘子','尹克西','尼摩星','马光佐','百草仙','人厨子','圣因师太','张一氓','西山一窟鬼','史伯威','史仲猛','史叔刚','史季强','史孟捷'];
private $email=['YG@qq.com','XLN@qq.com','SPP@qq.com','LMC@qq.com','LY@qq.com','GSZ@qq.com','QQC@qq.com','GSLE@qq.com','WSN@qq.com','WDR@qq.com','WXW@qq.com','GF@qq.com','GX@qq.com','GPL@qq.com','YLQ@qq.com','YLY@qq.com','WYP@qq.com','HSW@qq.com','LZY@qq.com','HYJ@qq.com','LWS@qq.com','LLD@qq.com','LEN@qq.com','CY@qq.com','HBL@qq.com','JLFW@qq.com','HD@qq.com','DEB@qq.com','CBWC@qq.com','XXZ@qq.com','YKX@qq.com','NMX@qq.com','MGZ@qq.com','BCX@qq.com','RCZ@qq.com','SYST@qq.com','ZYM@qq.com','XSYKG@qq.com','SBW@qq.com','SZM@qq.com','SSG@qq.com','SJQ@qq.com','SMJ@qq.com'];
private $mobile=['18988880001','18988880002','18988880003','18988880004','18988880005','18988880006','18988880007','18988880008','18988880009','18988880010','18988880011','18988880012','18988880013','18988880014','18988880015','18988880016','18988880017','18988880018','18988880019','18988880020','18988880021','18988880022','18988880023','18988880024','18988880025','18988880026','18988880027','18988880028','18988880029','18988880030','18988880031','18988880032','18988880033','18988880034','18988880035','18988880036','18988880037','18988880038','18988880039','18988880040','18988880041','18988880042','18988880043'];
为了测试的方便我建立了几个数组:姓名、电话、email
定义一个生成xx位字符型的数字
//随机生成x位字符型的数字以方便测试用的
public function numStr($num)
{
static $seed = array(0,1,2,3,4,5,6,7,8,9);
$str = '';
for($i=0;$i<$num;$i++) {
$rand = rand(0,count($seed)-1);
$temp = $seed[$rand];
$str .= $temp;
//unset($seed[$rand]);
//$seed = array_values($seed);
}
return $str;
}
要测试的相关工作准备好了,开始学习测试知识点了
*知识点一:测试一下静态方法create
**1,代码如下
//静态更新数据的方法create
public function mcreate()
{
$i=random_int(1,43);
$data=[
'user_name' =>$this->name[$i],
'user_idcard' =>$this->numStr(18),
'user_password' =>'123',
'user_school' =>'神雕侠侣',
'user_mobile' =>$this->mobile[$i],
'user_email' =>$this->email[$i],
'user_qq' =>$this->numStr(8),
'user_status' =>rand(1,4),
];
$res = Users::create($data);
dump($res->toarray());
}
**2.效果如图
*知识点二. 自动消除多余的字段的方法allowfield和save
如果有一天我取得的数据中有一个数据表的没有字段,如果直接用insert就会出错的
如:
出错了
此时解决方法有两种,(1)用create方法或save方法,(2)如果你一定要用insert方法那就要用到自动消除字段的allowfield了
对于此方法开启有两种方式
一、在模型中开启
class Users extends Model{
//自动过滤掉不存在的字段
protected $field = true;
}
二在控制器中用allowFiedl方法
//控制器添加
$add = $user->allowField(true)->save($data);
这个测试就不放上来了,
*知识点三、软删除
**1.
第一步,你要在数据表中有一个字段是delete_time,
第二步要在模型中引入类:use think\model\concern\SoftDelete;,
第三步在模型中开启//开了软删除功能
use SoftDelete;
protected $deleteTime = 'delete_time';
好了可以测试了,下面是代码
//软删除
public function msoftdestroy()
{
$res=Users::destroy(16);
dump($res);
}
如果没有delete_time就会提示出错
修改好数据表中的delete_time字段后就成功了
此时可以看到数据表中delete_time有数据了
下面要测试一下能不查询出来
方式一:控制器用Db类查询方式,可以看到有数据还是查询出来了
方式二、用模型类查询方式:可以看到数据没有查询出来,实际数据还在数据库中的哦
*知识点四、自动时间戳
第一:数据表中要有两个字段:int数据型
create_time int(10) DEFAULT NULL COMMENT '创建时间',
update_time int(10) DEFAULT NULL COMMENT '更新时间',
第二:首先在模型中开启:
//开启自动时间戳
protected $autoWritetamp=true;
第三,你的CURD都不用理会它们的,它们会自动的
第四、从上面的查询可以看出用Db类查询出来是数字,用模型查询出来是自动会变成时间的格式,这也是模型类的好处哦
相关文章
- Spring学习笔记(三十)——SpringBoot对象拷贝总结&Mapstruct
- [总结]视音频编解码技术零基础学习方法
- 机器学习回归模型相关重要知识点总结
- RC522读卡器 M1卡学习总结(二)
- HTML实体Entity名称编码学习总结
- oracle数据库学习总结在(一)
- cloudsim中simEntity和simEvent的学习
- 机器学习模型的集成方法总结:Bagging, Boosting, Stacking, Voting, Blending
- 评估和选择最佳学习模型的一些指标总结
- 强化学习技巧四:模型训练速度过慢、GPU利用率较低,CPU利用率很低问题总结与分析。
- 7000 字精华总结,Pandas/Sklearn 进行机器学习之特征筛选,有效提升模型性能
- Hadoop学习总结之四:Map-Reduce的过程解析详解大数据
- javaweb学习总结(四十四)——监听器(Listener)学习详解编程语言
- javaweb学习总结(三十)——EL函数库详解编程语言
- java基础学习总结——多态(动态绑定)详解编程语言
- Python学习笔记之一Python关键字及其总结详解编程语言
- form表单验证字段学习总结详解编程语言
- 初学者该如何学习Java(附带Java学习路线)
- 学习linux:探索极致之旅(linux学习过程)
- Linux 的核心就是选择、控制和学习新知识
- Linux网络配置:学习有线连接的方法(linux有线连接)
- 本地连接阿里云Redis实战一步一步学习(本地连接阿里云redis)
- 深度学习开启Redis新纪元(深度学习redis)
- 轻松学习MYSQL下载文档App分享(MYSQL下载文档app)
- MySQL学习之上传DLL命令详解(mysql上传dll命令)
- oracle学习笔记(二)
- Python学习笔记之os模块使用总结