【问题标题】:CakePHP Saving a new normalized HABTM model and using it in the resolved tableCakePHP 保存一个新的规范化 HABTM 模型并在解析表中使用它
【发布时间】:2023-03-27 02:32:01
【问题描述】:

如此快速地概述了我正在尝试做的事情。用户有很多BusinessUnitsUserBusinessUnithasMany BusinessUnitUser.

通过这种方式,我将它们与两个 hasManys 的关系标准化(我讨厌使用与 HABTM 相关的数据)。

在一个新的用户表单上,我想给用户同时添加一个新业务部门的选项。

目前,我的$this->request->data 数组如下所示:

Array
(
    [User] => Array
        (
            [title] => Mr
            [first_name] => Kyle
            [last_name] => O'Brien
            [username] => 55546@mylife.unisa.ac.za
            [producing_office_id] => 4
        )

    [BusinessUnit] => Array
        (
            [name] => lskfjsldkfjsdlfk
        )

)

现在,这显然是不正确的,但我正在努力思考如何解决这个问题。我想给你一个数组的视觉效果,你也许可以告诉我我的数组应该是什么样子。

这是我在BusinessUnitsUser 中的关系数组:

public $belongsTo = array(
        'User' => array(
            'className' => 'User',
            'foreignKey' => 'user_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
        'BusinessUnit' => array(
            'className' => 'BusinessUnit',
            'foreignKey' => 'business_unit_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        )
    );

编辑(感谢 ndm)

注意目标:我正在添加一个用户,我可能会也可能不会添加BusinessUnitsUser 关联,但我肯定还会添加一个新的BusinessUnit - 存在于new_user 表单。

目前,User 保存的是 $this->User->saveAll($this->request->data),但不是新的 BusinessUnit,当然也不是新的 BusinessUnitsUser 条目(我希望它包含新的用户 ID 和新的业务部门 ID。

【问题讨论】:

  • 是什么让您认为给定的格式不正确(事实并非如此,因为我正确理解了您的设置)?真正的问题是什么?
  • @ndm - 将此数据保存在 $this->User->saveAll($this->request->data);产生一个新保存的用户,但没有新的 BusinessUnit 模型条目,也没有新的 BusinessUnitsUser 条目(将生成新的 user_id 和新的 business_unit_id)
  • 好的,我明白了,请将其添加到您的问题中。

标签: php cakephp has-and-belongs-to-many


【解决方案1】:

通过连接表模型保存

解决方案应该非常简单,对于那种类型的关联,您必须通过连接表模型保存(即使您没有在该表上保存其他数据):

$this->User->BusinessUnitsUser->saveAssociated($this->request->data);

另请参阅http://book.cakephp.org/.../saving-your-data.html#saving-hasmany-through-data

这样,ORM 可以正确保存belongsTo 关联数据,并使用从关联数据的保存操作中获得的外键值在连接表中创建适当的记录。

【讨论】:

  • 抱歉,我过了一段时间才回复你。我是天才,我不小心在我的 var 文件夹上设置了一个 sudo chmod -R ,把我的 Ubuntu 安装搞砸了百万次。叹。无论如何,这就像一个魅力。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 1970-01-01
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多