Thinkphp3.2数据库字段自动转小写,字段大小写自动转换,以及thinkphp3一些bug
公司在使用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的更多相关文章
- [MySQL] INFORMATION_SCHEMA 数据库包含所有表的字段
sql注入后可以通过该数据库获取所有表的字段信息 1. COLLATIONS表 提供有关每个字符集的排序规则的信息. COLLATIONS表包含以下列: COLLATION_NAME 排序规则名称. ...
- 数据库中存储日期的字段类型到底应该用varchar还是datetime
将数据库中存储时间的数据类型改为varchar(),这时最好让这些时间是数据库中自动生成的(一个没有格式的输入也可能会导致输出错误),因为存储类型为varchar(),所以获取到的值也就被认为是一个字 ...
- 在PowerDesigner中自动生成sqlserver字段备注
在PowerDesigner中自动生成sqlserver字段备注 PowerDesigner是数据库设计人员常用的设计工具,但其自生默认生成的代码并不会生成sqlserver数据库的字段备注说明.在生 ...
- Django ORM (一) 创建数据库和模型常用的字段类型参数及Field 重要参数介绍
创建一个 Django 项目及应用 django-admin startproject orm cd orm python manage.py startapp app01 在 models.py 上 ...
- [转帖]Oracle数据库lob大对象数据类型字段总结,值得收藏
Oracle数据库lob大对象数据类型字段总结,值得收藏 原创 波波说运维 2019-07-11 00:02:00 https://www.toutiao.com/i67108943269703357 ...
- mysql数据库之表操作及字段约束条件
目录 一.存储引擎 二.表介绍 三.创建表 四.查看表结构 五.数据类型 一.介绍 二.数值类型 整数类型 浮点型 三.字符串类型 四.日期类型 五.枚举类型与集合类型 六.约束条件 七.修改表 al ...
- EF部分字段更新,自动忽略null字段
某个项目里的update代码是类似这样的 public T Update<T>(T entity) where T : ModelBase { var set = this.Set< ...
- Visio 2007中进行数据库建模时如何显示字段类型以及概念名称
关于在VISIO中进行数据库建模时如何显示字段类型,以及注释的 1 如何显示字段类型: 在visio菜单上--->点击数据库--->选项--->文档 打开后选择表这项,在上 ...
- access数据库用sql语句添加字段,修改字段,删除字段
用 Create Table 建立一个表 Table1 ,主键是自动编号字段,另一个字段是长度是 10 的文本字段. 代码如下:CREATE TABLE Table1 (Id COUNTER CONS ...
随机推荐
- 「JOI 2014 Final」裁剪线
做法一 首先将边界也视作四条裁剪线,整个平面作为一张纸,视存在 \(y = -\infty, y = +\infty, x = -\infty, x = +\infty\) 四条直线. 按照纵坐标依次 ...
- NOIP2018 Day2T3 保卫王国
首先不考虑强制要求的话是一个经典问题,令 \(f_{i, 0 / 1}\) 为 \(i\) 选或不选时以 \(i\) 为根的子树的最优答案.那么就有转移 \(f_{u, 0} = \sum f_{v, ...
- Java之static静态关键字详解|final关键字详解
前言 在Java语言中,static表示"静态"的意思,使用场景可以用来修饰成员变量和成员方法,当然也可以是静态代码块.static的主要作用在于创建独立于具体对象的域变量或者方法 ...
- docker的使用 (2)
使用Docker 想要玩转Docker,最简单的办法就是马上用Docker创建一些自己学习和工作中需要用到的容器,下面我们带着大家一起来创建这些容器. 运行Nginx Nginx是高性能的Web服务器 ...
- 【转载】Locust实现集合点
直接编写接口事务脚本对后台接口进行测试:有时测试需要让所有并发用户完成初始化后再进行压力测试,这就需要类似于LoadRunner中的集合点的概念,由于框架本身没有直接封装,有如下办法实现: from ...
- iOS 动画系列之动画解释
动画解释 译文 http://blog.jobbole.com/69111/ 原文 http://www.objc.io/issues/12-animations/animations-explain ...
- iOS App 架构文章推荐
iOS应用开发架构 iOS应用架构谈系列 阿里技术沙龙 2.2.1. Hybrid App 2.2.2. taobao 客户端架构 2.2.3. alipay 客户端架构 iOS APP 架构漫谈 ...
- 手把手带你基于嵌入式Linux移植samba服务
摘要:Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成. 本文分享自华为云社区<嵌入式Linux下移植samba服务--<基于北斗和4G ca ...
- ASP.NET Core 6框架揭秘实例演示[06]:依赖注入框架设计细节
由于依赖注入具有举足轻重的作用,所以<ASP.NET Core 6框架揭秘>的绝大部分章节都会涉及这一主题.本书第3章对.NET原生的依赖注入框架的设计和实现进行了系统的介绍,其中设计一些 ...
- Spring 配置概述
理解了IoC的概念,那Spring框架是如何具体操作的呢?Spring IoC容器(ApplicaitonContext)负责创建Bean,并通过容器将功能类Bean注入到其他需要的Bean中.Spr ...