我是cakePHP的新手,我已经开始创建一个非常小的“状态报告”项目,该项目允许用户报告他们分配到的项目的当前状态。
我目前正在使用acl,auth和session组件,允许多层用户通过管理员创建用户,项目并将其分配给彼此来管理彼此。我还修复了它,以便当用户登录并添加“状态”时,他们的登录会话会自动处理状态的“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' => ''
)
);
答案 0 :(得分:1)
在数据库中,您应该在用户表中有一个名为 project_id 的列,该列与项目表的 ID相关联专栏。
然后,在您的用户模型中,您应该与项目模型创建一个hasMany关系。
class User extends AppModel {
var $name = 'User';
var $hasMany = 'Project';
}
现在,当您获取特定用户时,您将获得与该用户相关联的所有项目。