保存一个新的规范化HABTM模型,并在已解析的表中使用它


CakePHP Saving a new normalized HABTM model and using it in the resolved table

快速概述一下我要做的事情。用户有多个BusinessUnitsUserBusinessUnit hasMany BusinessUnitUser .

通过这种方式,我将它们的关系标准化为两个hasmany(我讨厌处理与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' => ''
        )
    );

EDIT (thanks ndm)

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

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

通过连接表模型保存

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

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

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

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