CakePHP 2.0模型关系(组和用户)

时间:2012-03-16 17:16:00

标签: orm cakephp-2.0

所以,在我的项目中有组和用户。每个用户属于一个组,其中一个用户也是该组的管理员。我一直在努力弄清楚如何映射这些关系。

目前设置我正在创建一个表单,该表单将同时创建一个新组及其管理员(因此也是一个新用户)。

我想知道如何设置它以便A-我可以正确地保存用户和组B-因此,在表单中,用户和组信息都可以被验证并显示错误。

这是我的数据库表格的当前布局

小组表:

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(10) unsigned DEFAULT NULL,
`name` varchar(60) NOT NULL,
`account_active` tinyint(1) DEFAULT NULL,
`create_date` date NOT NULL,
`last_modified` date NOT NULL,
`delete_date` date DEFAULT NULL,
 PRIMARY KEY (`id`),
 KEY `groups_fk_admin` (`administrator`),
 CONSTRAINT `groups_fk_admin` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)

用户表:

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`group_id` int(10) unsigned DEFAULT NULL,
`email` varchar(200) NOT NULL,
`password` varchar(40) NOT NULL,
`first_name` varchar(45) NOT NULL,
`last_name` varchar(45) NOT NULL,
`create_date` date NOT NULL,
`last_modified` date NOT NULL,
`delete_date` date DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`),
KEY `users_group_id_fk` (`group_id`),
CONSTRAINT `users_group_id_fk` FOREIGN KEY (`group_id`) REFERENCES `groups` (`id`)

然后我的模型目前设置为....

小组模特:

 public $hasMany = array(
    'User' => array(
        'className' => 'User',
        'foreignKey' => 'group_id',
        'dependent' => false,
    )
);

public $belongsTo = array(

    'Administrator' => array(
        'className' => 'User',
        'foreignKey' => 'user_id',

    )
);

用户型号:

 public $hasMany = array(
    'Admin' => array(
        'className' => 'Group',
        'foreignKey' => 'user_id',
        'dependent' => false,

    ),

);

public $belongsTo = array(
    'Group' => array(
        'className' => 'Group',
        'foreignKey' => 'group_id',
  )
);

感谢您的帮助!如果我能提供更多信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

群组拥有多个用户

用户所属组

只需在Users表中添加另一个名为is_admin或其他的列,其中包含管理员所在组的ID值。

对于某些操作,您只需检查它是否通过某种情况。因此,如果您想检查用户是否是第4组的管理员,则必须检查它的is_admin id是否等于4.您可以将“普通”用户设置为0。

作为用户的财产,管理员不应该在您的数据库关系中声明与用户hasMany管理员和组属于管理员,管理员不是自己的模型。它是User的一个属性,一个角色。