首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在CRUD OOP CFCs中重用查询?

如何在CRUD OOP CFCs中重用查询?
EN

Stack Overflow用户
提问于 2012-07-27 20:42:32
回答 2查看 301关注 0票数 1

我有一个简单的CFC类,它在Product-Product.cfc上处理CRUD。

我正在扩展类,以允许基于应用程序的其他属性-例如,CartProduct.cfc扩展了Product.cfc,以便允许包含一个Quantity属性。

在基类Product.cfc中,我首先传入一个ID,并在read()方法中使用ID从数据库中检索数据:

代码语言:javascript
复制
<cffunction name="read" returntype="Query">
    <cfquery name="qData" datasource="mydb">
        SELECT    description
        FROM      mySKUTable
        WHERE     id = '#VARIABLES.Sku#'
    </cfquery>

    <cfreturn qData />
</cffunction>

<cffunction name="setSku" returntype="Product">
    <cfargument name="Sku" type="String" required="true" />
    <cfscript>
        var qData = QueryNew("");

        VARIABLES.Sku = ARGUMENTS.Sku;

        qData = read();

        VARIABLES.description = qData.description;
    </cfscript>
</cffunction>

我想在CartProduct.cfc中扩展它,以便使用read()方法从不同的表检索和设置数量:

代码语言:javascript
复制
<cffunction name="read" returntype="Query">
    <cfquery name="qData" datasource="mydb">
        SELECT    quantity
        FROM      myCartTable
        WHERE     id = '#VARIABLES.Sku#'
    </cfquery>

    <cfreturn qData />
</cffunction>

<cffunction name="setSku" returntype="Product">
    <cfargument name="Sku" type="String" required="true" />
    <cfscript>
        var qData = QueryNew("");

        THIS = SUPER.setSku(Sku);

        qData = read();

        VARIABLES.quantity = qData.quantity;
    </cfscript>
</cffunction>

当我这样做时,只调用扩展的read()。这很好,这是按照设计的。但是,我正在寻找一种方法来调用read()方法,因此我可以首先在基类中设置属性,然后在扩展类中设置properties。

对此有什么想法吗?

附注:我知道我没有使用CFQUERYPARAM或验证我的输入,等等。为了保持这个简单,我忽略了那些垃圾,所以现在请不要给我那些建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-27 21:03:41

好吧,这是我想出来的:

我不是从read()方法返回查询,而是将查询行转换为Struct并返回Struct。这样,我就可以在read()中调用SUPER.read(),然后将父结构中的键和值复制到每个级别的新结构中。这是更多的代码,但它完成了工作。

代码语言:javascript
复制
<cffunction name="read" returntype="Struct" output="false">
    <cfscript>
        var _qData = QueryNew("");
        var _properties = SUPER.read();
    </cfscript>

    <cfquery>
    ...
    </cfquery>

    <cfscript>
        StructAppend(
            _properties,
            REQUEST.UDFLib.Query.queryRowToStruct(_qData)
            );

        return _properties;
    </cfscript>
</cffunction>
票数 1
EN

Stack Overflow用户

发布于 2012-07-28 18:53:47

您可以使用“超级”范围来引用扩展组件。因此,要从Product.cfc的CartProduct.cfc内部调用"read“方法,请调用Super.read()。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11695385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档