数据库连接器与查询构造器

总结:同之前版本相比,ThinkPHP5的数据库操作对底层进行优化设计,对各种操作进行了高级封装。既可以直接使用连接器进行高效的原声查询,也可以使用封装好的查询构造器进行直观便捷的查询,为模型操作打下了基础。

连接数据库

配置方法:

1.静态连接:应用/模块中的数据库配置文件database.php

2.动态连接:入口类Db.php中的connect(参数(数组和字符串))方法

动态配置连接字符串:mysql://root:1234@localhost:3306/thinkphp#utf8

数据库类型://用户名:密码@数据库地址:数据库端口/数据库名#字符集

总结:操作数据库的第一步就是数据库的连接,TP5提供了强大灵活的连接方式,特别是惰性链接支持,极大提高了连接效率(db()助手函数不支持),使用户的关注重点放在业务逻辑上,不必担心连接问题。

原生SQL查询

Connection类

1.query(sql语句字符串,[参数绑定]):读操作,select。

2.execute(sql语句字符串,[参数绑定]):写操作,insert,update,delete。

Connection类实例通过入口类Db静态自动调用,不用显示写出。

参数绑定:防止SQL注入,用命名占位符进行参数绑定。

//1.查询操作:工资大于4000元的员工信息,用命名占位符进行参数绑定$sql = "select name,salary,dept from staff where salary > :salary";$result = Db:query($sql,['salary'=>4000]);

//2.更新操作,将id=1004的记录,salary增加1000$sql = "update staff set salary = salary+1000 where id=:id";Db::execute($sql,['id'=>'1004']);

//3.插入操作:默认添加到表的尾部的$sql = "insert into staff (name,sex,age) values (:name,:sex,:age)";Db::execute($sql,['name'=>'Alert','sex'=>1,'age'=>33]);

//4.删除操作:id=1010的记录$sql = "delete from staff where id=:id";Db::execute($sql,['id'=>1010]);

总结:因为数据只能识别并运行原生SQL语句,所以对于数据库的一切查询操作,最终都要归结到原生查询。包括后面要学到的,利用查询构造器来进行增删改查操作,最终仍是调用连接类Connection对应方法完成。

查询构造器工作原理与链式操作

1.查询构造器的工作原理?

2.什么是链式操作?为什么要用链式操作?

3.数据表的查询条件是如何生成的?

table,field,where

4.如何用查询构造器实现数据表的增删改查(CURD)操作?

查询条件生成的三种方法

新增与更新操作

1.新增

insert(['字段'=>'值'])

insert(['二维数组'])

2.更新

update(['字段'=>'值'])

setInc/setDec('字段',步长)

查询与删除操作

1.读取

find(主键)

select(主健)

2.删除

delete(主键)

delete(true)

总结:查询条件的调用次序是生成SQL条件的次序,推荐使用闭包,来生成查询条件,不仅功能强大,而且便于扩展。

模型入门知识

1.什么是模型,有什么用?

模型是对实体的抽象描述,快速直观的展示出实体的特征。

2.模型类中有哪些属性和方法

1)模型类的属性和方法需要在基类Model.php;

2)Model.php类位于public/library/think/Model.php;

3)该类是一个抽象类,不能被实例化,必须由子类继承并实现内部全部抽象方法。

模型的创建与使用方法

1.模型于数据表的对应关系

2.模型与数据表的区别与联系

区别

分工不同:Db类负则数据表的访问,模型专注于业务逻辑处理

返回值不同:Db访问返回数组,模型操作返会对象

联系

模型最终仍需调用Db类完成数据表的查询操作

3.如何创建模型

1.手工创建:在哟ing用或模块下创建模型目录model,并在该目录下创建与数据表同名的类文件:如User.php对应user.dbf表;

2.命令创建:在当前项目目录下,用命令:php think make:model模块名/模型名,会自动创建指定位置和命名空的空模型,并自动与数据表绑定;

php think make:model index/student

3.模型创建完成后,会自动获取当前数据表名称$table,表中所有字段信息$field,主键$pk和数据库配置信息$connection。同时会自动继承基类Model中所有属性和方法,protected类型在本模型中使用,public类型还可以在控制器使用,静态方法大多直接用在控制器,进行CURD操作。

4.如何在控制器调用模型

1)实例化调用:

用new生成模型对象;

用模型对象处理相关业务;

2)静态调用:

通过静态查询直接将一个空模型转为数据模型;

再调用相关方法完成增删改查操作;

3)不推荐使用助手函数model()和添加模型类后缀

5.模型数据访问的方式

模型访问方式

控制器访问(外部):用模型对象:$model;

模型访问(内部):用伪对象变量:$this;

通过模型和表中添加数据

1.什么是CURP操作?

2.Create创建数据

1)数据创建过程可以触发很多操作,非Db操作可比;

2)静态调用的实质其实仍是实例化调用,只是将CURD方法进行静态封装;

3)saveAll()方法实际上是通过多次执行insert语句完成,很少用到;

4)理论上讲,通过模型向表中添加数据,尽可能都采用静态方式。

通过模型更新表中的数据

1)不允许无条件更新,必须设置更新条件;

2)可以将更新条件,如主键写在更新数据中,方法可以自动识别;

3)更新条件可以使用闭包,完成更复杂的业务逻辑。

通过模型来查询表中的数据

1.ORM模型(对象关系映射)

ThinkPHP5实现了基于ActiveRecords模式的ORM模型

2.Read读取操作

1)原则来说,查询都应该采用静态查询方法;

2)尽可能采用get()和all()方法代替find()和select();

3)牢记一条原则:一个模型对象实例应该唯一对应数据表的一条记录;

通过模型来删除表中记录

1)delete()方法不要传任何参数,它只删除当前模型对象对应的记录;

2)destory()中的删除条件,推荐采用闭包方式;

3)推荐用软件删除替代该方法,即用更新的方式来实现删除操作。

模型读取器和修改器设置方法

1.模型的读取器

触发条件:当用模型对象读取表中字段的时候;

应用场景:日期时间字段,集合或枚举数据,数字状态与文本转换,字段拼装;

设置位置:在模型中设置,访问属性通常为protected,不允许外部直接访问;

方法名称:get属性名称Attr($name,$data=[])。

2.模型修改器

触发条件:当用模型对象向数据表中心增记录或更新字段值的时候;

应用场景:日期时间字段,集合或枚举数据,数字状态与文本转换,字段瓶装;

设置位置:在模型中设置,访问属性通常为protected,不允许外部直接访问;

方法名称:set属性名称Attr($name,$data=[])。

修改器的工作原理图

总结:模型的获取器与修改器,是模型中最常用的自定义方法,配合后面要学习的验证器,可以让用户更安全的读取数据表中的数据。

模型数据类型转换属性

类型转换

总结:通过配置属性值的方式,来完成写入数据的类型自动转换,比用修改器和读取器更加灵活方方便。如果数据处理逻辑不复杂,推荐使用这种方式来替代传统的读取器和修改器方法。

php mysql 模型_ThinkPHP数据库与模型相关推荐

  1. thinkphp项目mysql类关系_ThinkPHP数据库与模型

    数据库连接器与查询构造器 总结:同之前版本相比,ThinkPHP5的数据库操作对底层进行优化设计,对各种操作进行了高级封装.既可以直接使用连接器进行高效的原声查询,也可以使用封装好的查询构造器进行直观 ...

  2. mysql逻辑模型_数据库逻辑模型是什么,数据模型是什么?

    数据(data)是描述事物的符号记录.模型(Model)是现实世界的抽象.数据模型(Data Model)是数据特征的抽象,是数据库管理的教学形式框架. 数据模型所描述的内容包括三个部分:数据结构.数 ...

  3. laravel的使用-模型和数据库基本操作

    一 数据库相关配置(项目根目录的.env文件) DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=tpstudy DB_US ...

  4. mysql数据库导出模型到powerdesigner,PDM图形窗口中显示数据列的中文注释

    1,mysql数据库导出模型到powerdesigner 2,CRL+Shift+X 3,复制以下内容,执行 '******************************************** ...

  5. 【MySQL】使用Visio绘制数据库关系模型图

    使用Visio绘制数据库关系模型图 1 新建项目 文件-新建–软件和数据库-数据库模型图 点击后,出现如下界面: 2 绘制 左侧"实体关系"中将"实体"形状拖放 ...

  6. ECMALL数据库关系模型的实现

    2019独角兽企业重金招聘Python工程师标准>>> 所谓模型,则是一个一个的数据实体,换句话说就是一个数据表,你可以基于这个模 型,调用model.base.php中的数据库操作 ...

  7. Django(part20)--数据库和模型

    学习笔记,仅供参考,有错必纠 文章目录 数据库和模型 Django下使用mysql数据库 安装pymysql包 创建和配置数据库 模型(Model) 模型概述 python数据库模型-Models 案 ...

  8. php的数据模型包括,数据库中模型的分类有哪些

    数据库中模型的分类:1.概念数据模型,面向用户.面向现实世界的数据模型,描述一个单位的概念化结构:2.逻辑数据模型,可以通过实体和关系勾勒出企业的数据蓝图:3.物理数据模型,具有以实物或画图形式直观的 ...

  9. 【万字干货】OpenMetric与时序数据库存储模型分析

    摘要:解读OpenMetric规范和指标的模型定义基础上,结合当下主流的时序数据库核心存储及处理技术,尝试让用户(架构师.开发者或使用者)结合自身业务场景选择合适的产品,消除技术选型的困惑. 本文分享 ...

最新文章

  1. ASP.NET页面的生命周期
  2. Oracle 数据库启动 startup和startup force的区别
  3. 腾讯企业IT部蔡晨:从有界到无界,新一代企业安全防御之道
  4. CRecordset类
  5. 快学Scala习题解答—第二章 控制结构和函数
  6. windows7系统配置maven环境
  7. 剑指offer之java缓存总结,从单机缓存到分布式缓存架构
  8. oracle awr报告生成_5.性能测试 - Oracle体系结构和性能优化简介
  9. c语言 freopen txt_C语言的文件操作 freopen
  10. VC++中多线程学习(MFC多线程)二(线程的相关操作、线程间的通信)
  11. 自定义Toast的出现样式
  12. 算法导论的道与术、工程师思维奠定能走多远
  13. MYSQL误删数据恢复
  14. 手工定制眼镜将风靡中国(lyy bros)
  15. python zip(*zipped)的疑问
  16. 论文写作之查找中文对应的英文标题引用格式
  17. 解析 通证经济的分类及用途
  18. 安卓10不支持qmc解码_魅族官宣内测安卓10 数十款机型支持和四大亮点加持
  19. 中国全屋智能行业市场前瞻与投资战略规划分析报告
  20. android手机慢,揭秘Android手机变慢的三大原因与对策

热门文章

  1. vs2015 下配置sfml
  2. linux是ubuntu还是centos
  3. Android之Surface/Window/View/SurfaceView区别
  4. Android6.0之前版本(AwesomePlayer)OMXCodec执行流程细节
  5. 解决Python中文注释报错
  6. NDK-JNI实战教程(一) 在Android Studio运行第一个NDK程序
  7. iOS 使用fopen返回null
  8. 开机黑屏,屏幕最上方出现一条越来越明显的彩色花纹!
  9. ipv6单播地址包括哪两种类型_探秘联接|技术小课堂之BRAS设备IPv6地址分配方式...
  10. Android Studio实现功能丰富的仓库管理系统