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參數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM