zoukankan      html  css  js  c++  java
  • 数据据操作 tp5

    数据库操作-DB类

    学习手册

     

    数据库配置

     

    注意1:在TP里面,可以在模块下面单独的建立一个database.php配置文件,代表这个模块就使用配置的这个数据库

     

    注意2:我们可以在config.php里面配置多个数据信息也是可以的

     

    数据库操作-查询

    先在控制器引入Db类

     

    使用Db类的query方法即可

     

    查询也可以使用占位符

     

    数据库操作-增删改

    使用Db类的execute方法

     

    数据库切换

    1. 在application/config.php里面配置一个db1的数据库信息

     

    1. 使用Db::connect('db1') 获取 dedecms数据库里面的数据

     

    手册:

     

    构造器-查询

    方式一:获取所有的数据

     

    效果

     

    方式二:获取单条数据(a. 根据主键 b.查询条件)

     

    效果

     

    例如:查询用户名为caoyang的记录

     

    构造器-添加

     

    构造器-更新

     

    构造器-删除

     

    别名处理

    对于上面的查询构造器,使用的是Db::table(表前缀的表名),可以换一种方式来不写表前缀

    Db::name('不要表前缀的表名')

     

    建议使用Db::name()方法调用

    助手函数

    在新版TP5里面已经不存在M()函数(tp3.2的时候可以帮我们实例化系统的模型)使用的是db()帮助函数进行替换

    db('不要前缀的表名')->select();

     

    闭包查询

    db('admin')->select(function($query){

    // $query里面可以设置查询的条件

    });

     

    使用Query对象查询

    有点类似laravel里面的查询构造器

     

     

    模型学习

    在MVC里面,M是负责对数据的处理,其实在TP5里面模型封装的已经很好了,基本上我们不用做过多的操作,使用系统自带的基类即可完成大部分的curd操作。

    模型定义

    需要写在模块的model目录下,我们可以使用TP5自带的命令行工具进行生成。

    注意1:在TP5里面模型也不在使用类后缀,直接就是使用去除表前缀后的名称作为模型的名称。(模型名称使用大驼峰的方式)

    例如:表的名称为 sh_admin 对应的模型文件名称 Admin.php

    例如:表的名称为 sh_goods_attribute 对应的模型文件名称 GoodsAttribute.php

    >php think make:model appindexmodelUser

     

    创建后

     

    定义sh_user表

    上面的模型和下面的sh_user是对应的

     

    基本操作-增加

    完成数据的增加主要有如下几种方法

    1. 模型对象的save方法(先为对象设置属性)
    2. 模型类的create静态方法
    3. 模型对象的saveAll批量添加方法

    实操:

    1.模型对象的save方法(先为对象设置属性)

     

    2.模型类的create静态方法【简化操作】

     

    3.模型对象的saveAll批量添加方法【上面的两种操作,都只能完成单条数据的插入,如果批量插入数据,需要使用模型对象的saveAll方法】

     

    基本操作-查看

    查询数据主要有如下几种方法

    1. 模型类的get静态方法【存在返回值为对象,否则为null】
    2. 通过字段查询getByFieldname()方法
    3. 根据条件查询get(['username' => 'root'])
    4. where方法查询->find()
    5. where方法查询->select()
    6. 模型类的all静态方法和select静态方法

     

    实操:

    1.模型类的get静态方法【存在返回值为对象,否则为null】,通过传递主键获取数据

     

    效果

     

    2.根据条件查询get(['username' => 'root'])

    方式一:

     

    方式二:使用where方法传递(需要注意后面要通过find()方法调用一下)

     

     

    3.通过模型对象的字段查询getByFieldname('查询条件')方法

     

     

    1. 模型类的where方法查询,然后调用find()方法

     

     

    5.where方法查询->select()

    方式一:

     

    方式二:

     

     

    6.模型类的all静态方法和select静态方法

     

    注意:对应all和select方法返回的数据,是一个数组,数组中的每个元素是一个模型对象,如果我们需要把他们转换为普通的二维数组(数组中的元素也是数组)

     

    效果:

     

    便捷方式获取模型实例

    在新版的Tp5里面可以有如下两种便捷方式获取模型实例:

    方式一:使用model助手函数

     

    方式二:使用TP5自带的Loader类的model静态方法

     

    总结:在新版的TP5里面,在原先TP3.2里面的单字母函数D已经不存在,取而代之的是model函数。

    基本操作-更新

    更新数据主要有如下几种方法

    1.先 get(),后save()

    2.模型类update静态方法

    实操:

    1.先调用模型类的get()静态方法,然后在调用模型对象的save()方法

     

    2.模型类update静态方法

    方式一:

     

    方式二:

     

    基本操作-删除

    删除数据主要有如下几种方法

    1.先使用模型类的get()静态方法,然后在使用模型对象的delete()方法

    2.模型类destroy静态方法

     

     

    实操:

    1. 先使用模型类的get()静态方法,然后在使用模型对象的delete()方法

     

    2.模型类destroy静态方法

     

    3.使用destroy同时删除多条数据

     

    4.模型对象的delete方法进行删除(需要传递删除条件)

     

     

    相关文档

    网站:https://www.kancloud.cn/manual/thinkphp5/135186

    模型关联

    注意:在TP里面的模型关联没有laravel里面那么好用,简单的了解即可,一般来说,还是建议自己在代码里面完成模型间的关系处理。不要过来的依赖模型关联。

    在TP里面主要是定义三种模型关联类型:

    一对一

    简介

    注意:一对一的关系是可以在一张表里面完成的,但是一般来说,数据有冷热之分,热数据(查询频繁的数据,应该单独的抽取称为一张表,水平方向字段数应该尽可能的少)冷数据(查询较少的数据,单独的放在另外的一张表里面进行操作,通过一个外键和热数据表进行关联。例如下面的表里面的是通过sh_profile表里面的user_id产生的关联。)

    场景:例如一个用户存在一个具体的用户履历信息

    sh_user 用户表

    id

    username

    passsword

    email

    1

    caoyang

    admin88

    gogery@163.com

    3

    andy

    admin88

    andy@sina.com

    sh_profile 履历表

    id

    user_id

    address

    card_id

    education

    ......

    23

    1

    深圳市

    421023112

    本科

    ........

    34

    3

    广州市

    7754123123

    硕士

    自己手工的连表查询:

    > select a.*, b.address  from sh_user a left join sh_profile b on a.id = b.user_id where a.id = 3;

    关联查询

    1. 建立用户表和履历表

     

    1. 创建User.php和Profile.php模型文件,并在User.php模型文件里面定义模型关联信息

     

    履历表模型

     

    1. 查询关联信息

     

    效果:

     

    对于上面的操作,完全可以自己写sql完成

     

    百度:链式操作

    http://www.thinkphp.cn/topic/43233.html

     

    关联添加

    1. 完全可以自己去在代码里面完成,没必要依赖TP的关联模型

     

    1. 使用Tp的关联模型进行数据的添加

     

    一对多

    简介

    一对多的模型还是很常见的,一般解决方法就是增加一张附加表,然后在附加表里面增加一个关联字段。

    常见:一个用户可以存在多本书籍。

    sh_user表:

    id

    username

    passsword

    email

    1

    caoyang

    admin88

    gogery@163.com

    3

    andy

    admin88

    andy@sina.com

    sh_book表

    id

    user_id

    img

    author

    title

    ....

    1

    3

    1.jpg

    莫言

    分录肥臀

    3

    3

    3.jpg

    西红柿

    斗战

    关联查询

    1. 创建book模型,并且在user模型里面定义关联关系

     

    定义关系

     

    1. 构造测试数据

     

    1. 查询数据

     

    关联添加

    1. 不依赖TP的关联模型,自己手工的解决

     

    1. 使用Tp的关联模型完成

     

    多对多

    文档:https://www.kancloud.cn/manual/thinkphp5/142359

    自动验证

    相关文档:https://www.kancloud.cn/manual/thinkphp5/129319

    场景:用户的添加的时候完成自动验证,在TP5里面可以使用多种方式完成验证操作。

    验证类文件-方式一

    1. 在模块下建立一个validate目录,编写对应的验证类(类文件的名称和模型名称一致)

     

    1. 在控制器中使用模型对象的validate方法调用

     

    效果

     

    验证类文件-方式二

     

    控制器验证-方式一

    1. 调用控制器的$this->validate(验证数据,验证类名称)方法

     

    控制器验证-方式二

    1.调用控制器的$this->validate(验证数据,验证的规则)方法

     

    注意:验证通过返回true,否则返回错误的提示信息

    注意:如果用户想自定义验证提示信息,则可以传递第三个参数

     

    系统验证类的使用

    在有的时候我们不希望自己定义验证类来处理,可以使用系统自带的Validate类进行验证

     

    验证类的静态方法

     

    演示

     

    验证场景

    TP里面使用了一种叫做验证场景的概念,针对不同的场合使用不同的验证,例如:在添加的时候有添加的验证规则;在更新的时候有更新的规则

     

    表单验证

    主要是为了防止外站提交(csrf攻击)

    解决:

    1. 在服务器返回表单信息的之前,生成一个唯一的密钥,然后在表单里面的隐藏域里面存放一下,同时还要把数据存到session里面一下。

    2. 用户填完信息后,点击提交后,检测用户表单隐藏域里面的密钥和session里面的时候一样,一样则没有伪造提交(外站提交)

    实现:

    1. 在提交表单里面使用token()函数生成一个隐藏域

     

    1. 在自动验证里面进行验证

     

    坑-dateFormat验证规则

    在TP5如果需要验证某个时间数据,可以指定验证个还是,我们可以使用dateFormat规则,同时为其传递一个验证的规则字符串。

     

    查看Validate底层的dateFormat方法

     

    相关文档:

    http://code.ziqiangxuetang.com/php/func-date-parse-from-format.html

    SQL调试

    本地调试模式开启

     

    修改config.php配置文件即可

     

    打印最后执行的sql

     

     

     

  • 相关阅读:
    归并之将两个有序数组合并(已測试)
    Embedded Android 协同翻译
    IOS中公布应用程序,进度条一直不走怎么处理
    《textanalytics》课程简单总结(2):topic mining
    编程小错误备忘录
    观察者模式
    scrapy递归抓取网页数据
    leetCode 95.Unique Binary Search Trees II (唯一二叉搜索树) 解题思路和方法
    spring4.0.0的配置和使用
    ios面试基础
  • 原文地址:https://www.cnblogs.com/ampl/p/8297160.html
Copyright © 2011-2022 走看看