我最近開始使用CakePHP,並試圖定義用戶特定的「字段」首選項。基本上,我希望每個用戶都能夠指定他/她希望在表格中看到哪些字段。CakePHP:有沒有辦法在hasAndBelongsToMany的定義中包含變量?
爲此,我有一個用戶表,一個字段表和一個fields_users表。最後一個表只是一個field_id和user_id,所以代碼知道將該字段與該用戶相關聯。
到目前爲止,我已經爲'User'和'Fields'的控制器/模型創建了一個控制器/模型,並將它們與hasAndBelongsToMany屬性鏈接起來。例如,在 '場' 的模式,我已經定義了以下屬性:
` 變量$ hasAndBelongsToMany =陣列(
'User' => array (
'className' => 'User',
'foreign_key' => 'field_id',
'join_table' => 'fields_users',
'fields' => array('User.id'),
'conditions' => array('User.id' => 2),
'unique' => false,
) );`
正如你可以看到上面,數組'條件'部分中的'User.id'是硬編碼的。
我的問題是這樣的:我怎樣才能讓這個屬性的'條件'部分被設置爲當前用戶的ID?
顯然,我只關心當前用戶的字段偏好,但此時我正在獲取每個人的用戶信息。
將它設置爲初始屬性定義中的一個變量不起作用,我不知道我應該在什麼時候這樣做(或者如果完全有更好的方法)。 (在beforeFilter中沒有工作,我似乎無法從模型的__construct函數中訪問$ _SESSION)
讓我更清楚 - 我知道如何獲取用戶ID等,並且我知道如何從控制器和模型中設置'hasAndBelongsToMany'屬性。問題是,即使我在控制器的'beforeFilter'函數中修改'hasAndBelongsToMany'屬性,看起來使用該屬性的關鍵代碼已經被執行,並且條件不被考慮在內 我想要的全部是能夠獲得某種數據結構,包括當前用戶指定的字段信息。現在,我可以得到這個,但我可以爲每個用戶獲得。 – GTT 2010-06-30 15:14:50
'beforeFilter()'中的代碼是什麼? – bancer 2010-06-30 15:48:00
我只是將其更改爲以下內容,現在似乎正在開展工作。 (){ 'function beforeFilter(){ \t \t parent :: beforeFilter(); \t \t $ user_id = $ this-> Session-> read('User.id'); \t \t $ this-> Field-> hasAndBelongsToMany ['User'] ['conditions'] = array('User.id'=> $ user_id); \t}' 這真的很奇怪,因爲我正在嘗試各種各樣的事情來讓它運行。在此之前,我想可能是我用初始聲明中的值覆蓋了整個數組 - 它似乎在__construct和beforeFilter之間有時會被cake修改。無論如何,很抱歉打擾你。謝謝你通過它說話。 – GTT 2010-06-30 19:55:23