ThinkPHP5.0框架开发--第8章 TP5.0 模型

第8章 TP5.0 模型

=================================================

今日学习

1、模型(model)

数据模型

2、新建数据模型

1) 手动新建

a、打开前台模块(C:\AppServ\www\tp5\application\index)

新建model目录

b、在model目录下 新建 User.php

// 声明命名空间

namespace app\index\model;

// 导入系统的数据模型

use think\Model;

// 声明user模型

class User extends Model{

}

2) 命令新建

1) 切换到项目目录

php think make:model app\index\model\Users

3) 注意

1、数据模型的名字 建议大家跟数据库名一致

2、如果数据库名字和模型名不一致 可以设置表名

protected $table="";

3、如果表名(yzm_user),数据模型名 (YzmUser)

3、模型的实例化

1、调用静态方法

$res=User::get(1);

dump($res->toArray());

2、实例化数据模型

$user=new User();

$res=$user::get(2);

dump($res->toArray());

3、使用loader

$user=Loader::model("user");

$res=$user::get(3);

dump($res->toArray());

4、使用助手函数

$user=model("user");

$res=$user::get(4);

dump($res->toArray());

4、查询操作

1、单条数据

// get方法

// 使用数字

$res=User::get(1); // 默认主键

// 使用数组

$res=User::get(["name"=>'yzmedu3']);  // 默认查找用户名

// 使用闭包函数

$res=User::get(function($query){

$query->where("id",15);

});

// find方法

$res=User::where("id",13)->find();

2、查询多条数据

// all

// 所有数据

$res=User::all();

// 字符串

$res=User::all("1,2,3");

// 数组

$res=User::all([5,6,7]);

// 数组

$res=User::all(['pass'=>'123']);

// 闭包

$res=User::all(function($query){

$query->where("pass","123")

->whereOr("pass","456")

->order("id","desc");

});

// select 和 all 基本类似

$res=User::select();

$res=User::limit(2)->select();

3、获取某个字段和某列值

// 获取某个值

$res=User::where("id",5)->value("name");

// 获取某列值

$res=User::column("name","id");

4、动态查询

// 查询出匹配到的第一条数据

// getBy字段名

$res=User::getByAge('44');

dump($res->toArray());

5、增加操作

1、设置属性

$user=new User();

$user->name="yzmedu21";

$user->pass="abc";

$user->age=18;

// 返回影响行数

$user->save();

2、通过data方法

$user=new User();

$user->data([

"name"=>"yzmedu22",

"age"=>"22",

"pass"=>"qwe",

]);

// 返回影响行数

$user->save();

3、实例化时

$user=new User([

"name"=>"yzmedu23",

"pass"=>'zxc',

"age"=>20

]);

// 返回影响行数

$user->save();

// allowField 屏蔽掉数据库中不存在的字段

$user->allowField(true)->save();

// 指定插入数据库的字段

$user->allowField(['name','age'])->save();

4、获取自增的ID

// 获取插入数据ID

echo $user->id;

5、增加多条数据

$user=new User();

$list=[

['name'=>"yzmedu33","age"=>33],

['name'=>"yzmedu34","age"=>34]

];

$user->saveAll($list);

6、create方法

$user=User::create([

"name"=>"yzmedu35",

"age"=>35

]);

6、删除操作

// $user=User::get(1);

// 返回影响行数

// dump($user->delete());

// 删除主键2

$user=User::destroy(2);

// 删除主键3,4,5

$user=User::destroy("3,4,5");

$user=User::destroy([6,7,8]);

// 删除name

$user=User::destroy(['name'=>"yzmedu23"]);

// 删除多个条件

$user=User::destroy(['name'=>'yzmedu33','age'=>33]);

// 使用闭包

$user=User::destroy(function($query){

$query->where("id","<","15");

});

// 删除数据

$user=User::where("id",">","19")->delete();

dump($user);

7、修改操作

// 设置字段更新数据

$user=User::get(15);

$user->age=19;

$res=$user->save();

// 直接数组修改

$user=new User;

$res=$user->save(

[

"pass"=>"qweasd",

"age"=>16,

],["id"=>16]);

// 修改数据

$_POST['name']="yzmedu55";

$_POST['pass']="pass55";

$_POST['age']="55";

$_POST['sex']="nan";

$_POST['id']=17;

$user=new User;

$res=$user->allowField(['name','pass','age'])->save($_POST,['id'=>17]);

// 批量更新

$data=[

['id'=>15,'name'=>"abc",'pass'=>456],

['id'=>17,'name'=>"abc",'pass'=>456],

];

$user=new User;

$res=$user->saveAll($data);

echo User::getLastSql();

// 更新操作

$user=new User;

$res=$user->where("id",'>','17')->update(['age'=>18]);

$res=User::where("id","<","18")->update(['pass'=>'zxc']);

// 闭包更新数据

$user=new User;

$res=$user->save(['name'=>'yunzhimeng'],function($query){

$query->where("id","15");

});

8、聚合

// 统计数据条数

$tot=User::count();

dump($tot);

// 条件判断

$tot=User::where("age",">",18)->count();

dump($tot);

// 统计最大值

$max=User::max('age');

dump($max);

// 统计最小值

$min=User::min("age");

dump($min);

// 平均值

$avg=User::avg('age');

dump($avg);

// 求和

$sum=User::sum('age');

dump($sum);

9、获取器

1、数据模型

// sex 的获取器

public function getSexAttr($val){

switch ($val) {

case '0':

return "未知";

break;

case "1":

return "男";

break;

case "2":

return "女";

break;

}

}

2、控制器

// 获取ID为15 的数据

$user=User::get(17);

// 经过获取器的操作

dump($user->toArray());

dump($user->sex);

// 不经过获取器处理

dump($user->getData());

3、注意

1、如果字段 user_status 修改器名字getUserStatusAttr

2、如果字段 status 修改器名字getStatusAttr

10、修改器

1、数据模型

// 用户密码的修改器

public function setPassAttr($val){

return md5($val);

}

2、控制器

// 修改 ID 为15 的密码

$user=new User();

// 密码会实现自动加密

$res=$user->save(['pass'=>'456'],['id'=>15]);

dump($res);

3、注意

1、修改器的触发条件是 save方法

11、自动完成

1、修改器和自动完成区别

修改器:数据赋值的时候自动进行转换处理

自动完成:没有手动赋值的情况下进行手动处理

2、自动完成

// 增加和修改操作都会执行

protected $auto=[];

// 创建数据执行

protected $insert=['create_time'];

// 修改数据执行

protected $update=['update_time'];

12、时间戳

1、系统支持自动写入创建和更新的时间戳字段

1) 在配置文件中设置

// 自动写入时间戳字段

'auto_timestamp'  => true,

2) 在数据模型中设置

// 设置自动写入时间戳

protected $autoWriteTimestamp=true;

2、可以设置字段默认值

// 增加时间的字段

protected $createTime='create_times';

// 更新时间的字段

protected $updateTime='update_times';

3、取消更新时间戳设置

protected $updateTime=false;

14、软删除

1、作用:

实现假删除,可以进行恢复

2、实现

<?php

// 声明命名空间

namespace app\index\model;

// 导入系统的数据模型

use think\Model;

// 配合软删除

use traits\model\SoftDelete;

// 声明user模型

class User extends Model{

// 使用软删除

use SoftDelete;

// 设置删除的时间戳

protected $deleteTime="delete_times";

}

3、控制器

1、删除数据

$res=User::destroy(15);

2、获取数据

$res=User::get(15);

// 软删除 数据库数据存在,但是get获取不到

3、直接删除数据

$res=User::destroy(14,true);

$user=new User();

$res=$user->where("id",'5')->delete();

4、读取所有数据包含软删除数据

$res=User::withTrashed()->find(15);

$res=User::withTrashed()->select();

5、仅仅读取软删除数据

$res=User::onlyTrashed()->select();

$res=User::onlyTrashed()->find(1);

ThinkPHP5.0框架开发--第8章 TP5.0 模型的更多相关文章

  1. ThinkPHP5.0框架开发--第5章 TP5.0 控制器

    ThinkPHP5.0框架开发--第5章 TP5.0 控制器 第5章 TP5.0 控制器 ============================================== 上次复习 1.路 ...

  2. ThinkPHP5.0框架开发--第4章 TP5.0路由

    ThinkPHP5.0框架开发--第4章 TP5.0路由 第4章 TP5.0 路由 ================================================== 上次复习 1. ...

  3. ThinkPHP5.0框架开发--第3章 TP5.0 配置

    ThinkPHP5.0框架开发--第3章 TP5.0 配置 第3章 TP5.0 配置 ========================================================= ...

  4. ThinkPHP5.0框架开发--第1章 Tp5.0安装

    ThinkPHP5.0框架开发--第1章 Tp5.0安装 第1章 Tp5.0 安装 ======================================================== 今 ...

  5. ThinkPHP5.0框架开发--第2章 TP5.0架构

    ThinkPHP5.0框架开发--第2章 TP5.0架构 第2章 TP5.0架构 ================================================== 上次复习 1.如 ...

  6. ThinkPHP5.0框架开发--第11章 TP5.0 杂项

    ThinkPHP5.0框架开发--第11章 TP5.0 杂项 第11章 TP5.0 杂项 =============================================== 今日学习 1. ...

  7. ThinkPHP5.0框架开发--第10章 TP5.0验证器

    ThinkPHP5.0框架开发--第10章 TP5.0验证器 第10章 TP5.0验证器 ======================================= 今日学习 1.验证器 1) 控 ...

  8. ThinkPHP5.0框架开发--第9章 TP5.0视图和模板

    ThinkPHP5.0框架开发--第9章 TP5.0视图和模板 第9章 TP5.0视图和模板 ===================================================== ...

  9. ThinkPHP5.0框架开发--第7章 TP5.0数据库操作

    ThinkPHP5.0框架开发--第7章 TP5.0数据库操作 第7章 TP5.0数据库操作 ===================================================== ...

随机推荐

  1. Qt-信号和槽-1对1

    前言:信号和槽是Qt的核心机制,窗体和控件对象之间的沟通一般都使用信号和槽. 对于部件有哪些信号和槽,可以查看help文档. 一.使用自定义槽 1.1 新建工程 新建工程,新建Widget类(基于QW ...

  2. Excel里的多列求和(相邻或相隔皆适用)

    最近,需要这个知识点,看到网上各种繁多复杂的资料,自己梳理个思路. 不多说,直接上干货! 简述:将L列.M列和N列,相加放到O列.(当然这里是相邻的列).同时,也可以求相隔几列的某些列相加.

  3. Vue模拟酷狗APP问题总结

    一.NewSongs.vue中的38行  this.$http.get('/proxy/?json=true')   里面这个路径的获取 二.router文件夹中的index.js  中的  comp ...

  4. Redis安装到Windows系统

    redis官方没有windows版本,在windows下安装需要单独去找.地址:https://github.com/MSOpenTech/redis/releases.本文用的是Redis-x64- ...

  5. 「JavaSE 重新出发」05.03.01 利用反射分析类

    在 java.lang.reflect 包中有三个类 Field, Method 和 Constructor 分别用于描述类的域.方法和构造器. Class 类中的 getFields, getMet ...

  6. Activiti Modeler 5.22.0整合到Spring项目

    转载 https://blog.csdn.net/u010411264/article/details/71480354

  7. Java中更精确的计时

    我们一般的java运输计时代码是 long begintime = System.currentTimeMillis(); //运算代码 long endtinme=System.currentTim ...

  8. TESTUSERB 仅能对TESTUSERA 用户下的某些表增删改查、有些表仅能对某些列update,查询TESTUSERB 用户权限,获取批量赋予语句。

    TESTUSERB 仅能对TESTUSERA 用户下的某些表增删改查.有些表仅能对某些列update,查询TESTUSERB 用户权限,获取批量赋予语句. select 'grant '|| PRIV ...

  9. (1)安装vagrant和virtualbox

    使用xshell,学校服务器需要先联外网. 1.安装Linux头包(linux-header package): # #yum install kernel-devel 2.安装virtualbox. ...

  10. windows下Word使用-快捷键

    1.word全屏显示——Alt+U+V 2.上标——Ctrl+Shift+= 3.下标——Ctrl+=