【发布时间】:2014-12-18 23:30:31
【问题描述】:
(这里是轮子新手)
我正在尝试找出放置视图控制器功能中使用的大量大型和/或复杂查询的最佳位置。
我有一个视图calendar.cfm,和一个具有该功能的控制器:
<cffunction name="calendar">
<cfset formData = getValidatedFormData()>
<cfset fromDate = formData.fromDate>
<cfset toDate = formData.toDate>
<cfset dbLocation = formData.dbLocation>
<cfset dateList = getDateList()>
<cfset selectLists = getSelectLists()>
<cfset companySelectList = selectLists.companySelectList>
<cfset activitySelectList = selectLists.activitySelectList>
<cfset instructorSelectList = selectLists.instructorSelectList>
<cfset statusSelectList = selectLists.statusSelectList>
<cfset courseNumberLists = getCourseNumberLists()>
<cfset girsCourseNumberList = courseNumberLists.girsCourseNumberList>
<cfset activityCourseNumberList = courseNumberLists.activityCourseNumberList>
<cfset activityCourseNumberList = courseNumberLists>
<cfset ELMActivityList = getELMActivityList()>
<cfset activityList = getActivityList()>
<cfif len(elmActivityList.LM_ACT_CD) gt 0>
<cfset elmActIDList = Replace(QuotedValueList(ELMActivityList.LM_ACT_CD, ","), "'',", "", "all")>
<cfelse>
<cfset elmActIDList = "'String1','String2'">
</cfif>
<cfif len(activityList.girs_act_cd) gt 0>
<cfset girsActIDList = Replace(QuotedValueList(activityList.GIRS_ACT_CD, ","), "'',", "", "all")>
<cfelse>
<cfset girsActIDList = "'String1','String2'">
</cfif>
<cfset combinedList = getCombinedList( elmActIDLIst , girsActIDList )>
<cfset needUnion = false>
<cfset programList = getProgramList()>
</cffunction>
每个函数,例如getDateList(),都包含长的和/或复杂的查询。控制器已经有将近 700 行长,而且我只实现了项目中的 5 或 6 个视图之一——这将需要额外的查询。
我觉得我做错了。我尝试将所有查询函数放在模型文件夹中的 cfc 文件中
<cfcomponent extends="Model">
functions...
但我不知道如何从控制器中的 calendar 函数调用它们。例如,我尝试过,
<cfset dateList= model("model_file_name").getDateList()>
但事实并非如此。
我应该将查询放在哪里以及如何调用它们?
编辑
当我尝试调用模型中的函数时,我得到“无法访问数据源”。但是,我在查询中明确指定了数据源。例如,我在模型和控制器中都有以下功能:
<cffunction name="getDateList" returntype="any">
<cfquery name="dateList" dataSource="ELM_Prod">
SELECT DATES FROM
(SELECT dateadd(dd,DAYS, <cfqueryparam cfsqltype="cf_sql_date" value="#fromDate#">) DATES
FROM
(SELECT TOP 365 colorder - 1 AS DAYS from master..syscolumns
WHERE id = -519536829 order by colorder) a
WHERE datediff(
dd,
dateadd(
dd, DAYS, <cfqueryparam cfsqltype="cf_sql_date" value="#fromDate#">
),
<cfqueryparam cfsqltype="cf_sql_date" value="#toDate#">
) >= 0
AND dateadd(
dd,
DAYS,
<cfqueryparam cfsqltype="cf_sql_date" value="#fromDate#">
) <= <cfqueryparam cfsqltype="cf_sql_date" value="#toDate#">
) a order by DATES
</cfquery>
<cfreturn dateList>
</cffunction>
当我使用<cfset dateList = getDateList()> 调用控制器中的函数时,一切正常,并且我没有收到数据源错误。但是,如果我使用 <cfset dateList = model("wheels_girs_model").getDateList()/> 从模型中调用它,我会收到错误消息。因为我使用了多个数据源,所以我没有在配置文件中设置数据源。我已经在管理面板中设置了它们,并直接在 cfqeury 中引用它们。什么会阻止模型找到数据源?
【问题讨论】:
-
存储过程是你的朋友。
-
存储过程从来都不是我的朋友。 :)
标签: view coldfusion model controller cfwheels