CakePHP HABTM - 我不明白

yos*_*ssi 2 cakephp has-and-belongs-to-many

之前被问到但仍然在黑暗中.

cakePHP HABTM,我搞错了吗?

将再次尝试:
我有两个表:storesmanagers
我想创建一个新表,managers_stores并用它来保持经理为每个商店的完整列表.
我知道每个save()提供完整记录数据的动作(我打算这样做)都会导致删除表行,只保留新记录.
这是我需要的一种不受欢迎的行为.那么,我该如何管理我的应用程序的HABTM信息以及删除我保存的数据背后的想法是什么?!

谢谢

dec*_*eze 7

save()不会删除任何内容,只有保存,saveAll()将截断managers_stores您正在保存的特定模型的条目,如果unique关系的值是true.手册中没有完全明确这一点:

unique:如果true(默认值)cake将在插入新密钥表之前首先删除外键表中的现有关系记录,此时更新记录.因此,在更新时需要再次传递现有关联.

http://book.cakephp.org/1.3/en/view/1044/hasAndBelongsToMany-HABTM

无论何时您save()是个人记录,都只会触及该记录.例如,
当您在相同的记录中记录相关记录时,链接将被重置,并且只有您保存的记录中的商店才会与管理器关联.例如(伪代码):saveAll()ManagerStoremanagers_stores

  • 经理HABTM存储1,2和3
  • Manager->saveAll(array('Manager' => ..., 'Store' => array(4, 5, 6)))
  • 经理现在HABTM商店4,5和6; 现有的协会被覆盖

因此,如果您不喜欢此行为,请设置unique关联中的值false,或手动管理HABTM记录.老实说,对于任何中途复杂的应用程序,依赖Cake对HABTM关系的自动处理可能会变得非常脆弱且难以调试,所以我总是自己管理HABTM记录.

$this->Manager->save(...);
$this->Manager->ManagersStore->save(array('manager_id' => $this->Manager->id,
                                          'store_id'   => 42));
Run Code Online (Sandbox Code Playgroud)