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 より大きい場合は、レコードが既に存在することを意味し、それ以外の場合は更新を行います。
このロジックを適用するのを手伝ってください。