2012-01-16 30 views
1

我想循环使用ColdFusion ORM将数据插入数据库的一些值。ORM的setter名称变量EntitySave

我有问题得到正确的语法。这里是我想要做的一个例子:

<cfscript> 

     var tn = 'CompanyName'; 

     transaction{ 

      newComp = EntityNew("company"); 

       newComp.set & tn &('ABC Comp'); 

      EntitySave(newComp);             

     }    

    </cfscript> 

为了简化这个问题,我只使用了一个变量。实际的代码通过一系列数据循环,但如果我能弄清楚如何用一个变量来完成它,我可以处理其余的部分。

我已经尝试了一堆这样做的方法,但我无法获得正确的语法。

这可能吗?

任何帮助将是伟大的。

在此先感谢。

+0

好像到目前为止,我的选择是基于所有标签重写,并使用CFINVOKE或保持在CFSCRIPT并使用 评估()。我知道过去曾经有过评估()的问题,但是我会喜欢一些关于在这种情况下使用它的不好主意的反馈吗? – Sequenzia 2012-01-16 18:06:24

+0

如果您想坚持使用基于脚本的方法,那么使用评估将是您的选择。即使在非常流行的FW/1框架中,评估也用于populate()方法。所以我认为你的情况不可能是*错误的。关于为什么要避免评估的文档也很少,大多数是关于性能的。但cfinvoke的速度并不像直接函数调用那么快。你可能还会发现一些额外的有用信息[here](http://www.bennadel.com/blog/1320-ColdFusion-CFInvoke-Eliminates-The-Need-For-Evaluate-When-Dynamically-Executing-User-Defined- Functions.htm)。 – 2012-01-17 05:01:40

+0

谢谢安德烈亚斯。我想我现在要使用evaluate(),然后在Zeus出来时重写它来调用它。再次感谢。 – Sequenzia 2012-01-17 05:32:55

回答

1

尝试

evaluate('newComp.set#tn#("ABC Comp")'); 
+0

感谢您的帮助。这有效,但我总是读不使用评估()。这是使用它的最佳选择吗? – Sequenzia 2012-01-16 13:30:08

+0

你说得对。你应该尽量避免使用evaluate()。几乎所有evaluate()的实例通常都可以使用结构语法来替换。但是当你选择/需要对持久设置器和获取器进行动态调用时,没有其他语法可以创建此调用。无论如何,使用evaluate()应该是一个红旗。 – 2012-01-16 14:06:33

3

你能避免使用CFINVOKE标签评价:

<cfset tn = "CompanyName"> 
<cftransaction> 
<cfset newComp = EntityNew("company")> 
<cfinvoke component="#newComp#" method="set#tn#"> 
     <cfinvokeargument name="#tn#" value="ABC Corp"> 
</cfinvoke> 
</cftransaction> 

多了几分其在本例中使用here

的ColdFusion的下一个版本将带来invoke to script.

+0

谢谢山姆。这是一个选项,但我的所有我的ORM交易在cfscript中。当10出来时它会很好,但我不知道在什么时候做什么。再次感谢。 – Sequenzia 2012-01-16 18:04:08

0

也许写一个见面HOD到你的模型,使接受“动态”状态组成部分及其API的,如:

component { 
    function setState(Struct state){ 
    var key = 0; 
    for (key in state) 
    { 
     variables[ key ] = state[ key ]; 
    } 
    } 
} 

然后,在你调用代码,它传递一个结构:

newComp = EntityNew('Company'); 
state = {}; 
state[ tn ] = 'ABC Comp'; 
newComp.setState(state); 

我们这样做这通常在我们的构造函数,使我们能够做的事情在一杆,类似于Groovy和其他一些语言:

var chuck = new Contact({ firstName = "Chuck", lastName = "Taylor" });