我遇到一个问题,我有表用户和团队,我的关系定义如下:
public $hasAndBelongsToMany = array(
'Teams' => array(
'className' => 'Team',
'joinTable' => 'teams_users',
'foreignKey' => 'user_id',
'associationForeignKey' => 'team_id',
'unique' => 'keepExisting',
'order' => array('name' => 'ASC')
)
);
现在的问题是,当我删除例如属于id为1的团队的用户时,来自具有id 1的teams_users的所有关联都会随之消失。在我的单元测试中,我发现删除查询并不真正关心user_id并删除了我的团队中的所有内容:(以下是自动查询:
DELETE `TeamsUser`
FROM `enterpriseappstore_test`.`teams_users` AS `TeamsUser`
WHERE `TeamsUser`.`team_id` = 1
这是负责在模型中删除用户的代码:
$ok = $this->delete((int)$userId, false);
如何仅删除特定用户的关联,而不是团队?所以,从UsersController,我需要删除一个用户和他与所有剩余团队的连接......现在无论出于何种原因,我正在删除用户和所有关联(来自teams_users的连接),其中team_id是相同的,而不是user_id
答案 0 :(得分:0)
所以最后我不得不做手工SQL ......并不为此感到自豪,但它是迄今为止我找到的唯一解决方案。很高兴能够给出更好的解决方案:
$this->query('DELETE FROM `teams_users` WHERE `user_id` = '.(int)$userId.';');
$this->query('DELETE FROM `users` WHERE `id` = '.(int)$userId.';');
答案 1 :(得分:-1)
从控制器执行此操作:
$ok = $this->User->delete((int)$userId);
确保teams_users
到users
表中的外键具有约束ON DELETE CASCADE
,f.ex。:
ALTER TABLE teams_users
ADD CONSTRAINT fk_users_teams
FOREIGN KEY(user_id)
REFERENCES users(id)
ON DELETE CASCADE;