2016-03-30 6 views
0

私は、私のテーブルのID列の存在を確認するvalidatesPresenceOf()を使用しているモデルを持っています。CFWheels:validatesPresenceOf()を一時的にオフにします

<cfscript> 
    component extends="Model" 
    { 
     public function init() 
     { 
      validatesPresenceOf(property="id", message="error msg"); 
      table(mytable); 
     } 
    } 
</cfscript> 

今私のテーブルのidカラムは、トリガを経由して、自動生成されたフィールドであるので、私は本当にidは、以下のような状況を除き、NOT NULLであるかどうかを確認する必要はありません。

<select name=data> 
<option value=""></option> 
<option value=data.id></option> 
</select> 

以上、私は使用がnullであるidとない値とオプション値を提出するかどうかを確認するためにcfwheel検証を使用しています。ここでは、validatesPresenceOf()関数を使用してIDが送信されているかどうかを確認しています。

しかし、私は、このテーブルにデータを保存する必要があると私のコードは以下の通りである別の場所にある:

data = model(tbl.others).new(); 
data.name = name; 
data.save(); 

上記のコードためvalidatesPresenceOfのテーブルにレコードを挿入しません()IDにあなたが見ることができるように、私は私のテーブルの自動生成フィールドであるため、私は私の挿入データにIDを設定していません。

私の質問では、この特定のIDの検証を一時的に無効にすることができますか、一時的にIDを検証してからその検証条件を削除することができます。

私は次のことを試してみましたし、それは動作しません:

public function custom_save(name) 
{ 
    automaticValidations(false); 
    data = model(mytable).new(); 
    data.name = name; 
    automaticValidations(true); 

    return data; 
} 

答えて

0

あなたは(モデルを使用して)まったく検証しません試みることができるようなsave()を使用して

http://docs.cfwheels.org/v1.4/docs/save

モデルクラスの機能create()およびupdateAll()は、validateパラメータを使用し、デフォルト値はtrueです。 falseに設定し、他の検証を手動で行うことができます。

+0

これは解決策ではありますが、最良の方法ではありません。http://docs.cfwheels.org/docs/object-validationというリンクで、validatesPresenceOf()関数で何らかの条件を適用できることがわかりましたその特定の列に対して機能を有効または無効にするかどうかを決定します。 –

+0

validatesPresenceOf(property = "id"、message = "msg"、= "this.gidが '0'")は、私が行ったことですが、最後に挿入されたIDを返しません。 –

+0

あなたが投稿したコードのどこにでも定義された状態は表示されません – Daniel

関連する問題