我看到了两种方法。
第一个我没有尝试过,但是它将组表的主键更改为组的名称并在组模型中设置primaryKey变量以及所有其他模型中与该表的所有后续引用和关联. 这可能会给您带来更多的头痛,我不推荐它,因为您可能会以某种方式破坏 ACL 组件。
另一种方法是我会做的,它需要您进行一些编程(据我所知,Cake 没有一种简单的方法来做到这一点)。在 User 模型中,放置一个 beforeSave 并在该函数中,使用组名创建一个虚拟变量,查找名称并插入正确的 id,然后删除该变量。
在 User.ctp 模型上
public function beforeSave() {
if (isset($this->data[$this->alias]['group_name'])) {
//do the lookup with the group_name
$group = $this->Group->find('first', array('conditions'=>array('name'=>$this->data[$this->alias]['group_name'])));
if (count($group) <= 0)
//... throw an Exception or handle any way you want this case
$real_group_id = $group['Group']['id'];
$this->data[$this->alias]['group_id'] = $real_group_id;
unset($this->data[$this->alias]['group_name']);
}
return true; //remember this is important! otherwise the save will stop
}
当您想要更改用户的组或添加另一个用户时,只需在控制器中执行此操作,
$data_to_save['User']['group_name'] = 'webuser';
beforeSave 函数将处理其余部分。
我意识到您要求使用 Cake-easy 方法来执行此操作,但我想没有(虽然不确定,请随时纠正我),beforeSave 函数可以为您节省大量控制器上的重复代码。清除数据库或更改组 ID 时唯一需要小心的是将它们与数据库中已有的用户正确重新关联,但由于是“迁移到生产”更改,因此已经预定义的用户应该很少或没有任何。