2013-03-05 47 views
0

我想寫一個函數,將運行就像cfquery的valuelist()函數。這裏是我的代碼:試圖寫UDF來創建從ORM對象的價值列表

links = entityload('press_releases_lnk',{prp_pr_id=article.getpr_id()}); 

function ormvaluelist(object,colname){ 
    retrnstr = ''; 
    for(mynum=1;mynum<=arraylen(object);mynum++){ 
     myvalue = object[mynum].getcolname(); 
     retrnstr = retrnstr&myvalue&','; 
    } 
    return retrnstr; 
} 

catlist=ormvaluelist(links,'prp_product_cat'); 

問題是讓「getcolname」使用我傳入的變量作爲列名稱。我相信我只是想念一些簡單的東西。

感謝

+0

'myvalue = object [mynum] [colname]; myvalue = myvalue();'? – 2013-03-05 17:34:54

+0

@Peter - 這是關閉的一個例子嗎? – 2013-03-05 17:36:56

+0

不是。這是Adobe無法實現世界其他地方使用的'myvalue = object [mynum] [colname]()'語法的解決方法。 (這可能或不是OP的結果)。閉包是一種「封閉」其狀態的函數 - 請參閱http://en.wikipedia.org/wiki/Closure_(computer_science) – 2013-03-05 17:37:56

回答

2

你可以逃脫使用ormExecuteQuery("select #column# from #entityName#")?它會返回一個數組,您可以使用arrayToList()將該數組轉換爲列表。

請注意,colname應該是實體中的屬性名稱。如果你確實是指db中的列名,那麼請使用舊的<cfquery>valueList()

CF10:

myvalue = invoke(object[mynum], "get#colname#"); 

CF9或以下,如果你要使用CFSCRIPT:從@PeterBoughton

myvalue = evaluate("object[mynum].get#colname#()"); 

的想法,我使用它之前,它可能爲你工作,還是不行,請嘗試它:

getterFunction = object[mynum]['get#colname#']; 
myvalue = getterFunction(); 

否則,使用CFML:

<cfinvoke component="#object[mynum]#" method="get#colname#" 
      returnVariable="myvalue"> 

不要忘記listAppend(),所以你不必擔心在退貨清單末尾多出的,。和var範圍你的變量。

+1

非常感謝。我使用了CF10解決方案,效果很好。你節省了我的工作時間。再次感謝。 – Sollinger04 2013-03-05 19:16:32

+0

另外,你可以嘗試一個'for-in'循環來尋找你喜歡的數組。 :) – Henry 2013-03-05 20:01:34