0

所以我有一个Message模型。创建消息时,我想创建新Recipient记录。(消息有很多收件人,收件人属于消息)。

目的是message_id这些关联记录中的字段会自动填充新的MessageID。

我试图以各种方式格式化数据,并且知道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)。

4

1 回答 1

0

一些东西:

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

2)由于我需要保存多个关联的记录,我必须使用saveAll或者saveMany这样做会导致添加额外的空白行,因为主记录没有数字索引(这是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记录。

于 2013-05-07T12:00:39.060 回答