公司在使用thinkphp框架,版本也有些老,被一些bug坑了,记录一下

自动转小写解决办法,最简单的就是在配置文件加上

'DB_PARAMS' => [\PDO::ATTR_CASE => \PDO::CASE_NATURAL],

但是如果项目已经上线了一段直接, 这样可能会影响其他人写的

然后我想在控制器里面动态改变DB_PARAMS这个配置,后来发现不行.

因为基类里面有数据库操作,model是单例的.不会重新new对象.

最后我想到了一个办法,重新声明一个函数,就是为了让他重新new一个model

function db($table=''){
C('DB_PREFIX','');
$config = [
'db_type' => C('DB_TYPE'),
'db_user' => C('DB_USER'),
'db_pwd' => C('DB_PWD'),
'db_host' => C('DB_HOST'),
'db_port' => C('DB_PORT'),
'db_name' => C('DB_NAME'),
'db_params' => [
\PDO::ATTR_CASE => \PDO::CASE_NATURAL,
],
];
return M($table)->db('wzb',$config);
}

这样在试用的时候,把M换成db就好了

如果还想修改其他参数,可以参照ThinkPHP\Library\Think\Db.class.php,大概在56行左右,其中parseConfig函数,里面有配置的参数

因为公司项目每次实例化model都是M('tableName',null),所以我把表前缀也去掉了.

温馨提示: 楼主不建议表中的字段含有大写,建议试用小写+斜划线的命名方式.

版本:thinkphp3.1的pdo扩展

问题1:在使用pdo链接方式的时候,使用模型find($id)方法时,不会自动识别主键

解决办法:在ThinkPHP\Extend\Driver\Db\DbPdo.class.php中,大概在178行下面加上

if($info['primary']===false){
$info['primary'] = $val['key'];
}

版本:thinkphp3.1

问题2:如果开启自动过滤数据库不存在的字段(默认开启),使用join的时候,会过滤掉where里面的join外表里面的字段

解决办法:在ThinkPHP\Lib\Core\Model.class.php中,大概在549行

把if(isset($options['where']) && is_array($options['where']) && !empty($fields))) {

改成 if(isset($options['where']) && is_array($options['where']) && !empty($fields) && !isset($options['join'])) {

就是多加一个!isset($options['join'])条件

问题3:模板自动压缩了,导致html换行没有空格. 其实这个也不算bug, 这个默认是开启的.

解决办法:配置文件改一下TMPL_STRIP_SPACE参数

Thinkphp3.2数据库字段自动转小写,字段大小写自动转换,以及thinkphp3一些bug的更多相关文章

  1. [MySQL] INFORMATION_SCHEMA 数据库包含所有表的字段

    sql注入后可以通过该数据库获取所有表的字段信息 1. COLLATIONS表 提供有关每个字符集的排序规则的信息. COLLATIONS表包含以下列: COLLATION_NAME 排序规则名称. ...

  2. 数据库中存储日期的字段类型到底应该用varchar还是datetime

    将数据库中存储时间的数据类型改为varchar(),这时最好让这些时间是数据库中自动生成的(一个没有格式的输入也可能会导致输出错误),因为存储类型为varchar(),所以获取到的值也就被认为是一个字 ...

  3. 在PowerDesigner中自动生成sqlserver字段备注

    在PowerDesigner中自动生成sqlserver字段备注 PowerDesigner是数据库设计人员常用的设计工具,但其自生默认生成的代码并不会生成sqlserver数据库的字段备注说明.在生 ...

  4. Django ORM (一) 创建数据库和模型常用的字段类型参数及Field 重要参数介绍

    创建一个 Django 项目及应用 django-admin startproject orm cd orm python manage.py startapp app01 在 models.py 上 ...

  5. [转帖]Oracle数据库lob大对象数据类型字段总结,值得收藏

    Oracle数据库lob大对象数据类型字段总结,值得收藏 原创 波波说运维 2019-07-11 00:02:00 https://www.toutiao.com/i67108943269703357 ...

  6. mysql数据库之表操作及字段约束条件

    目录 一.存储引擎 二.表介绍 三.创建表 四.查看表结构 五.数据类型 一.介绍 二.数值类型 整数类型 浮点型 三.字符串类型 四.日期类型 五.枚举类型与集合类型 六.约束条件 七.修改表 al ...

  7. EF部分字段更新,自动忽略null字段

    某个项目里的update代码是类似这样的 public T Update<T>(T entity) where T : ModelBase { var set = this.Set< ...

  8. Visio 2007中进行数据库建模时如何显示字段类型以及概念名称

    关于在VISIO中进行数据库建模时如何显示字段类型,以及注释的 1 如何显示字段类型:   在visio菜单上--->点击数据库--->选项--->文档    打开后选择表这项,在上 ...

  9. access数据库用sql语句添加字段,修改字段,删除字段

    用 Create Table 建立一个表 Table1 ,主键是自动编号字段,另一个字段是长度是 10 的文本字段. 代码如下:CREATE TABLE Table1 (Id COUNTER CONS ...

随机推荐

  1. 「JOI 2014 Final」裁剪线

    做法一 首先将边界也视作四条裁剪线,整个平面作为一张纸,视存在 \(y = -\infty, y = +\infty, x = -\infty, x = +\infty\) 四条直线. 按照纵坐标依次 ...

  2. NOIP2018 Day2T3 保卫王国

    首先不考虑强制要求的话是一个经典问题,令 \(f_{i, 0 / 1}\) 为 \(i\) 选或不选时以 \(i\) 为根的子树的最优答案.那么就有转移 \(f_{u, 0} = \sum f_{v, ...

  3. Java之static静态关键字详解|final关键字详解

    前言 在Java语言中,static表示"静态"的意思,使用场景可以用来修饰成员变量和成员方法,当然也可以是静态代码块.static的主要作用在于创建独立于具体对象的域变量或者方法 ...

  4. docker的使用 (2)

    使用Docker 想要玩转Docker,最简单的办法就是马上用Docker创建一些自己学习和工作中需要用到的容器,下面我们带着大家一起来创建这些容器. 运行Nginx Nginx是高性能的Web服务器 ...

  5. 【转载】Locust实现集合点

    直接编写接口事务脚本对后台接口进行测试:有时测试需要让所有并发用户完成初始化后再进行压力测试,这就需要类似于LoadRunner中的集合点的概念,由于框架本身没有直接封装,有如下办法实现: from ...

  6. iOS 动画系列之动画解释

    动画解释 译文 http://blog.jobbole.com/69111/ 原文 http://www.objc.io/issues/12-animations/animations-explain ...

  7. iOS App 架构文章推荐

    iOS应用开发架构 iOS应用架构谈系列 阿里技术沙龙 2.2.1. Hybrid App 2.2.2. taobao 客户端架构 2.2.3. alipay 客户端架构   iOS APP 架构漫谈 ...

  8. 手把手带你基于嵌入式Linux移植samba服务

    摘要:Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成. 本文分享自华为云社区<嵌入式Linux下移植samba服务--<基于北斗和4G ca ...

  9. ASP.NET Core 6框架揭秘实例演示[06]:依赖注入框架设计细节

    由于依赖注入具有举足轻重的作用,所以<ASP.NET Core 6框架揭秘>的绝大部分章节都会涉及这一主题.本书第3章对.NET原生的依赖注入框架的设计和实现进行了系统的介绍,其中设计一些 ...

  10. Spring 配置概述

    理解了IoC的概念,那Spring框架是如何具体操作的呢?Spring IoC容器(ApplicaitonContext)负责创建Bean,并通过容器将功能类Bean注入到其他需要的Bean中.Spr ...