如何在ColdFusion ORM中自定义更新功能?

时间:2013-08-13 11:39:14

标签: orm coldfusion

我想自定义ORM的更新功能。默认情况下,ORM加载需要更新的对象,进行更新,然后保存对象。我想在满足某个条件时更新记录。

例如:

enter image description here

我想将付款方式从信用卡更新为现金。在更新记录之前,我想检查一下我是否已经拥有现金付款方式。如果存在,那么我不需要更新记录,否则更新记录。

对于上面的检查,我使用了这个SQL:

SELECT COUNT(*) 
FROM hr_lookup_paymentmode 
WHERE PaymentMode = 'cash' 
  AND modeid <> '10'   

等效HQL:

/**
    * @hint Determines total number of results with same value of search for update purposes.
    */
remote numeric function searchUpdateCount(string q,numeric modeid ) output="false" {

var hqlString = "";
var whereClause = "";
var params = {};
hqlString = hqlString & "SELECT count(*) ";
hqlString = hqlString & "FROM hr_lookup_paymentmode";
if (len(arguments.q) gt 0)
{
    whereClause  = ListAppend(whereClause, " PaymentMode = '#arguments.q#'", "|");
    whereClause  = ListAppend(whereClause, "modeid <> '#arguments.modeid#'", "|");
    whereClause = Replace(whereClause, "|", " AND ", "all");

}


if (len(whereClause) gt 0){
    hqlString = hqlString & " WHERE " & whereClause;
}
return ormExecuteQuery(hqlString, false, params)[1];
}

参数q = 'cash'modeid = 10。如果找到的计数大于0表示记录已存在,否则请进行更新。

请帮我应用这个逻辑。

1 个答案:

答案 0 :(得分:4)

您可以使用ORM事件处理程序 - 全局定义或在特定ORM对象中定义。 Here是有关事件处理程序的一些信息,但基本上您将在ORM对象中执行以下操作:

function preUpdate( obj, data ){
   {do stuff here }
}

在此示例中,obj是您要保存的ORM实体,data是包含ORM实体的旧数据的结构。您只需将逻辑添加到函数体中即可。