程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 解決phalcon model在插入或更新時會自動驗證非空字段,phalconmodel

解決phalcon model在插入或更新時會自動驗證非空字段,phalconmodel

編輯:關於PHP編程

解決phalcon model在插入或更新時會自動驗證非空字段,phalconmodel


在使用phalcon的insert和update功能時,因為數據庫所有的字段設置的都是NOT NULL,而phalcon的model在插入或更新之前會自動判斷字段是否需要必填,因此導致有空字段時無法存入。

開始遇到這問題時,想到兩種解決方法:

一、改數據庫字段,把NOT NULL改為可以為空。

  但該數據庫還得去找DBA,而且為了性能,DBA要求一般沒有特殊情況,字段必須是NOT NULL,所以該方案否決。

二、給可以為空的字段設置默認值。

  想過各種默認值,覺得空格最符合,但是賦值空格後,數據庫裡存的也會是空格,像一些empty和==''等判斷會失效,很可能會影響一些業務邏輯,想想,還是放棄該方案。

 

最後還是上網各種搜,phalcon的資料太少,百度根本搜不出來,最後轉戰google,功夫不負有心人,終於給我找到些蛛絲馬跡,最後再根據蛛絲馬跡找出來真正的解決方案。同樣有兩種,如下:

一、給可以為空的字段單獨設置規則

 

public function skipValidation($skipers=[])
    {
        foreach ($skipers as $skiper) {
            if (empty($this->$skiper)) {
                $this->$skiper = new \Phalcon\Db\RawValue('""');
            }
        }   
    }

 

 使用的時候:

public function beforeValidation()
{
     $this->skipValidation(['tag','source_url']);
}

這種方法可以完美解決問題,比較麻煩的是,需要設置每個可以為空的字段。

二、關閉phalcon對字段是否為空的判斷

 

public function initialize(){

    $this->setup(
        array('notNullValidations'=>false)
    );

  }

 

該方法直接把底層判斷字段是否為空的邏輯關閉了,可以一勞永逸的解決這個問題,缺點就是,自己前後台得做好必填字段的判斷。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved