Thinkphp6(6)模型学习与知识总结(二)

2022-10-25 15:16:06 浏览数 (1)

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 appmodel;

use thinkModel;

use thinkmodelconcernSoftDelete;

//use thinkfacadeDb;

/**

*/

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 appcontroller;

use appBaseController;

use thinkfacadeDb;

use appmodelUsers;

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 thinkmodelconcernSoftDelete;,

第三步在模型中开启//开了软删除功能

    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类查询出来是数字,用模型查询出来是自动会变成时间的格式,这也是模型类的好处哦

0 人点赞