我想自定义ORM的更新功能。默认情况下,ORM加载需要更新的对象,进行更新,然后保存对象。我想在满足某个条件时更新记录。
例如:
我想将付款方式从信用卡更新为现金。在更新记录之前,我想检查一下我是否已经拥有现金付款方式。如果存在,那么我不需要更新记录,否则更新记录。
对于上面的检查,我使用了这个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表示记录已存在,否则请进行更新。
请帮我应用这个逻辑。
答案 0 :(得分:4)
您可以使用ORM事件处理程序 - 全局定义或在特定ORM对象中定义。 Here是有关事件处理程序的一些信息,但基本上您将在ORM对象中执行以下操作:
function preUpdate( obj, data ){
{do stuff here }
}
在此示例中,obj
是您要保存的ORM实体,data
是包含ORM实体的旧数据的结构。您只需将逻辑添加到函数体中即可。