2011-07-06 37 views
1

我是一個CakePHP的新手,我已經開始創建一個非常小的「狀態報告」項目,這將允許用戶報告他們當前的狀態在他們被分配的項目上。belongsTo關係和蛋糕過濾PHP

我目前正在使用acl,auth和會話組件來允許多層用戶使用管理員創建用戶,項目並將它們分配給彼此來管理另一個用戶。我也有固定的,這樣當用戶登錄並進入添加一個「狀態」,他們的登錄會話自動將「USER_ID」的狀態的護理:

$this->data['Status']['user_id'] = $this->Auth->user('id'); 

我需要什麼幫助,現在做過濾用戶可以選擇添加「狀態」到的項目的選項。

我目前有一個表格,該表格包含用戶名和* projects_users *與* id,project_id,user_id *作爲字段的項目之間的關係。但是,烘烤此設置後,當用戶添加「狀態」時,下拉菜單提供所有項目,而不是嚴格指定它們「分配給」的項目。

我想將用戶的選項過濾到分配給他們的項目。我應該建立更多的關係嗎?或者這是一個很容易寫的小函數?任何幫助將不勝感激,如果我遺漏了信息,我很樂意發佈任何其他內容。

這裏是狀態型號設置:

class Status extends AppModel { 
var $name = 'Status'; 
//The Associations below have been created with all possible keys, those that are not needed can be removed 

var $belongsTo = array(
    'User' => array(
     'className' => 'User', 
     'foreignKey' => 'user_id', 
     'conditions' => '', 
     'fields' => '', 
     'order' => '' 
    ), 
    'Project' => array(
     'className' => 'Project', 
     'foreignKey' => 'project_id', 
     'conditions' => '', 
     'fields' => '', 
     'order' => '' 
    ) 
); 
} 

用戶模型看起來是這樣的:

var $belongsTo = array(
    'Group' => array(
     'className' => 'Group', 
     'foreignKey' => 'group_id', 
     'conditions' => '', 
     'fields' => '', 
     'order' => '' 
    ) 
); 

var $hasMany = array(
    'Status' => array(
     'className' => 'Status', 
     'foreignKey' => 'user_id', 
     'dependent' => false, 
     'conditions' => '', 
     'fields' => '', 
     'order' => '', 
     'limit' => '', 
     'offset' => '', 
     'exclusive' => '', 
     'finderQuery' => '', 
     'counterQuery' => '' 
    ) 
); 


var $hasAndBelongsToMany = array(
    'Project' => array(
     'className' => 'Project', 
     'joinTable' => 'projects_users', 
     'foreignKey' => 'user_id', 
     'associationForeignKey' => 'project_id', 
     'unique' => true, 
     'conditions' => '', 
     'fields' => '', 
     'order' => '', 
     'limit' => '', 
     'offset' => '', 
     'finderQuery' => '', 
     'deleteQuery' => '', 
     'insertQuery' => '' 
    ) 
); 

回答

1

在數據庫中,你應該有一列名爲在PROJECT_ID用戶項目關聯的表表的id列。

然後,在您的用戶模型中,您應該創建與項目模型的hasMany關係。

class User extends AppModel { 
    var $name = 'User'; 
    var $hasMany = 'Project'; 
} 

現在,當您獲取特定用戶時,您將獲得用戶所關聯的所有項目。

+0

我的當前表project_users是否保存了用戶和項目之間的關係?它目前擁有project_id和user_id。理想情況下,我想讓用戶表保持清潔,並有可能在項目中擁有多個用戶。 現在,當我檢索一個用戶時,我看到他們的關聯項目,但是我限制最低的用戶只能添加一個「狀態」。因此,我想在那裏檢索會話的活動用戶關聯項目。 我也將我的用戶模型添加到我的原始帖子中。 –

+0

這是一個HABTM表格。如果存在N:M關係,那很好。看起來就像這裏的情況。你需要在這裏使用一個自定義連接來將這些關係放在find語句中。請參閱食譜瞭解詳情 – mark

+0

@Curtis請在添加狀態時顯示您正在使用的檢索項目的代碼。 –