属于关系&在cakePHP中过滤

时间:2011-07-06 16:21:02

标签: php cakephp relationship belongs-to cakephp-appmodel

我是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' => ''
    )
);

1 个答案:

答案 0 :(得分:1)

在数据库中,您应该在用户表中有一个名为 project_id 的列,该列与项目表的 ID相关联专栏。

然后,在您的用户模型中,您应该与项目模型创建一个hasMany关系。

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

现在,当您获取特定用户时,您将获得与该用户相关联的所有项目。