gpt4 book ai didi

CakePHP HABTM - 我不明白

转载 作者:行者123 更新时间:2023-12-02 12:30:05 26 4
gpt4 key购买 nike

之前问过,但仍然蒙在鼓里。

cakePHP HABTM, am I getting it all wrong?

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

谢谢

最佳答案

save() 不会删除任何内容,只有使用 saveAll() 保存时才会截断您所在特定模型的 managers_stores 条目保存,如果关系的唯一值为true。手册中并未完全明确这一点:

unique: If true (default value) cake will first delete existing relationship records in the foreign keys table before inserting new ones, when updating a record. So existing associations need to be passed again when updating.

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

每当您 save() 一条单独的记录时,只有该条记录会被触及。
当您在同一个 go 中 saveAll() 一条 (例如,Manager) 记录以及关联的 Store 记录时,managers_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));

关于CakePHP HABTM - 我不明白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8773842/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com