2015-05-24 77 views
2

用戶可以屬於許多Company,後者又有許多Department存儲在SESSION範圍內具有一對多關係的鍵值對

當用戶登錄時,我想在SESSION範圍內存儲他所屬公司的哪個部門。

我目前做這樣(的getDepartments查詢包含CompanyNameDepartmentName記錄該用戶所屬):

<cfset SESSION.Department = StructNew()/> 
<cfloop query="getDepartments" group="CompanyName"> 
    <cfloop> 
    <cfset SESSION.Department[getDepartments.CompanyName][getDepartments.DepartmentName] = StructNew()/> 
    </cfloop> 
</cfloop> 

如果我運行上面我得到的輸出是這樣的:

struct 
NESTLE 
    struct 
    SALES  - struct [empty] 
    struct 
    HR   - struct [empty] 
---------------------------------------------- 
struct 
MARS 
    struct 
    LOGISTICS - struct [empty] 

因此,公司內的每個部門都正在創建一個結構體。由於沒有值分配給部門名稱,它顯示爲空。

我想我這樣做是不正確的。但同樣,我不知道另一種方式將多個部門名稱分配給SESSION範圍中的單個公司名稱。

任何想法?

+0

它唯一的那些用戶所屬。我沒有包含getDepartments查詢,但它僅包含用戶所屬的查詢! –

+3

不管你想要什麼,你都可以存儲信息,但是這裏正確的方法都取決於你打算如何使用它。您可以將部門名稱存儲爲列表,數組或者甚至可以將其保留爲結構(儘管使用簡單的「值」)。然後使用'structKeyExists(struct.companyName,「DepartmentName」)'來確定某人是否是特定部門的成員。但是,這一切都取決於你如何最終使用信息,你沒有解釋... – Leigh

回答

1

另一個解決方案可能是爲每個公司創建一個部門數組!而不是結構。喜歡這個。

<cfset SESSION.Department = StructNew()/> 
<cfloop query="getDepartments" group="CompanyName"> 
    <cfset SESSION.Department[getDepartments.CompanyName]=arrayNew(1)/> 
    <cfset i=0> 
    <cfloop> 
     <cfset i++ /> 
     <cfset SESSION.Department[getDepartments.CompanyName][i] = getDepartments.DepartmentName/> 
    </cfloop> 
</cfloop> 

enter image description here

相關問題