2015-05-24 5 views
2

Пользователь может принадлежать многим Company, которые, в свою очередь, имеют множество Department.Хранение пар ключ-значение, которые имеют отношение «один ко многим» в области SESSION

Когда пользователь входит в систему, я хочу сохранить в области SESSION, в каких отделах, в которых принадлежат компании.

Я сейчас делаю это как это (getDepartments запрос содержит CompanyName и DepartmentName записи, которые принадлежат пользователю в):

<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," theDepartmentName ")', чтобы определить, является ли кто-то членом определенного отдела. Но опять же, все зависит от того, как вы в конечном счете используете информацию, которую вы не объяснили .... – 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