萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> phalcon model在插入或更新時自動驗證非空字段怎麼解決

phalcon model在插入或更新時自動驗證非空字段怎麼解決

小編分享的這篇文章提供了phalcon model在插入或更新時自動驗證非空字段的解決辦法,工作學習中遇到問題的同學可以參考一下下文

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

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

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

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

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

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

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

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

   代碼如下 復制代碼 publicfunctionskipValidation($skipers=[])  {   foreach($skipersas$skiper) {    if(empty($this->$skiper)) {     $this->$skiper=new\Phalcon\Db\RawValue('""');    }   }  }  

使用的時候:

   代碼如下 復制代碼 publicfunctionbeforeValidation() {   $this->skipValidation(['tag','source_url']); }  

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

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

   代碼如下 復制代碼 publicfunctioninitialize(){  $this->setup(   array('notNullValidations'=>false)  );  }  

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

copyright © 萬盛學電腦網 all rights reserved