2012-03-16 73 views
0

所以,在我的项目中有组和用户。每个用户都属于一个组,其中一个用户也是该组的管理员。我一直在努力弄清楚如何映射这些关系。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', 
) 
); 

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

回答

0

集团的hasMany用户

用户属于关联组

并添加另一列到用户表称为is_admin也好,它是管理员组的ID值。

对于某些操作,您应该检查它是否通过了某个条件。因此,如果您想检查用户是否为第4组的管理员,则必须检查它是否为is_admin id等于4.对于“正常”用户,您可以将其设置为0。

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

+0

这很有道理......它比我想要完成的要简单得多。谢谢! – letsgettechnical 2012-03-16 22:34:54

+0

如果您计划让更多这些角色影响某些模型(如本例中的组),则可以考虑创建一个“关系”模型作为示例。 =) – pbond 2012-03-17 00:08:47