(車輪新手在這裏)放在哪裏查詢(尤其是長的)在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