(车轮新手在这里)放在哪里查询(尤其是长的)在CFWheels项目
我试图找出最好的地方放一些被用于大型和/或复杂的查询控制器可用于视图。
我有一个视图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中引用它们。什么会阻止模型找到数据源?
存储过程是你的朋友。 – 2014-12-19 02:53:36
存储过程从未成为我的朋友。 :) – 2014-12-19 19:56:52