在CakePHP中保存新的关联记录

时间:2013-05-07 00:04:55

标签: cakephp associations save

所以我有一个Message模型。创建消息时,我想创建新的Recipient记录。 (消息hasMany Recipient,Recipient belongsTo Message)。

目的是使用新的message_id ID自动填充这些关联记录中的Message字段。

我尝试按照哪种方式格式化数据,并且了解saveAllsaveAssociated方法,但似乎没有任何效果......以下是我认为可行的方法:

传递数据以保存:

[Message] => array
    (
        [subject] => Foo bar
        [body] => Blah blah blah.
    )
[Recipient] => array
    (
        [0] => array
            (
                [user_id] => 1
            )
        [1] => array
            (
                [user_id] => 5
            )
        [2] => array
            (
                [user_id] => 6
            )
    )

使用saveMany,saveAll,saveAssociated似乎没有什么区别(即使'deep'设置为true)。

1 个答案:

答案 0 :(得分:0)

一些事情:

1)正在创建的消息是一条新记录。我意识到之后我的控制器中没有$this->Message->create()。现在,我已经尝试了没有,它工作正常,但我相信最好的做法是包含它。

2)由于我需要保存多个相关记录,我必须使用saveAllsaveMany,但这样做会导致额外的空白行被添加,因为主记录没有数字索引(这是saveAll想要的。

所以这是我控制器的一些代码:

if ($this->request->is('post')) {
    $this->Message->create();
    if ($this->Message->saveAll($data, array('deep' => true))) {
        // code here
    }
}

以下是我的数据结构:

Array
(
    [0] => Array
        (
            [Message] => Array
                (
                    [subject] => Foo
                    [body] => bar
                    [Recipient] => Array
                        (
                            [0] => Array
                                (
                                    [user_id] => 1
                                )
                            [1] => Array
                                (
                                    [user_id] => 6
                                )
                            [2] => Array
                                (
                                    [user_id] => 38
                                )
                        )
                )
        )

)    

这将创建一个新的Message并正确关联新创建的Recipient记录。