2011-07-31 132 views
0

我有3個表格,其中包含用戶信息,一個用於學生,一個用於教師,另一個用於管理員。

他們沒有任何關係。我不想爲管理員創建一個儀表板,其中列出了學生和老師的名單。

我發現實現此目的的唯一方法是使用管理員控制器中的$uses變量。不過,我在很多地方都讀過這是不好的做法。

任何解決方案?

回答

3

另一個,也許更好的做法是利用ClassRegistry::init('MyModel')->myMethod()more reading @ Cake API

這隻會加載對象時,它的使用,而不是loadModeluses,與ClassRegistry模型被視爲單身。

-

,你正在做的事情錯了:你需要訪問無關,與你的電流控制器的模型。

有很多,你需要訪問所有你的模型數據,從一個控制器的條件,但從來沒有對如何做沒有打破約定一個明確的答案!

+0

不是一個更好的做法..這是從馬的嘴裏:https://groups.google.com/forum/#!msg/cake-php/E3xXtOsBAxc/mMfAOBBFTHkJ –

2

您可以隨時使用未使用

$this->loadModel('NewModelName'); 

然後你就可以訪問新加載的模型相關的另一種模式:

$this->NewModelName->add(); // whatever method model has defined 

爲什麼喜歡loadModel()上使用?

獲得性能。 如何?使用調用loadModel函數本身來加載您在使用數組中指定的所有模型。但問題在於,如果只有一項行動需要特定的模型,那麼將它包含在每個行動中是件好事。例如只有add()動作需要一個不相關的模型,但是如果你在uses數組中指定了它,則無論被調用什麼動作,都將加載完全不相關的模型。簡而言之,這將是低效的。它就像你已經在C程序中聲明變量,但從未使用它們。如果C編譯器會警告你,你沒有使用你的變量,但不幸的是,蛋糕無法告訴你。

如果您的所有操作都需要加載該模型,則可以使用它,否則使用loadModel()。

+0

這和$ uses方法有什麼區別? – AlexBrand

+0

'$ uses'是不好的做法! –

+1

只是因爲嗎? – AlexBrand

1

你可能沒看過我在你的另一個問題:)答案)

我有3個表是包含用戶信息,一個學生,一個教師,一個用於管理員。他們沒有任何關係。我不想爲管理員創建一個儀表板,其中列出了學生和老師的名單。

問題是你正在將相似的數據分成3個不同的表格,在這種情況下,用戶信息。所以,當你試圖管理這些數據時,你會碰到一堵磚牆:因爲當你將它們分成3張表時,你會忽略這些關係。

我發現實現這一目標的唯一方法是在管理員控制器中使用$ uses變量。

你對控制器有錯誤的想法。每個控制器管理特定模型(和相關模型)的數據流。這並不意味着你必須留在管理員控制器做管理的事情。要操作什麼型號決定你需要什麼控制器。

不過,我已經在很多地方,這是不好的做法讀取。

現在的主要問題:使用$使用的是你正在做的事情錯了紅旗:你需要有無關,與你的電流控制器模型的訪問。現在,編程中總會有例外,有時我們需要訪問該模型。這就是loadModel進來的地方,因爲它應該很少見。如果你需要這個模型很多,那麼你需要調用loadModel很多,這很麻煩,這是$使用的目的,但這意味着你的應用程序設計有些問題:))

因此,你可以說使用$ uses是壞決定的標誌(在數據庫設計或應用程序結構中);所以使用loadModel很多。

編輯:Any solutions? 我在你的其他問題中給出了一個解決方案。但是如果你想在一個地方擁有它們,你可以有一個用戶信息表。每個用戶可以有一個學生,教師,管理員和一個「組」字段來決定用戶是什麼組。第三種解決方案是使用$ uses。它的性能影響確實不會成爲問題。但是當你進一步開發你的應用程序時,它會變得非常複雜。這是你需要擔心的。例如,我可以這樣說,如果您使用Auth,則需要稍微調整它以使其與3個模型協同工作。如果你使用用戶表,它會容易得多。

+0

所以你說有一個單用戶表,然後是學生,老師和管理員表,基本上只有一個id列和一個user_id列? 您是否願意保留當前的設計,在學生和教師控制器中創建管理員操作,然後使用ajax將它們全部放在一個頁面中? – AlexBrand

+0

是的第一個問題。對於第二種:如果保留當前的設計,使用管理控制器中的$ uses是最簡單的方法(不要擔心性能影響)。從長遠來看,我不知道什麼是最好的,所有的解決方案都在可接受的範圍內;所以只需選擇一個你想使用的。 –

相關問題