在 CakePHP 中保存新的关联记录

Posted

技术标签:

【中文标题】在 CakePHP 中保存新的关联记录【英文标题】:Saving new associated records in CakePHP 【发布时间】:2013-05-07 00:04:54 【问题描述】:

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

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

我尝试过以各种方式格式化数据,并且知道 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】:

一些事情:

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

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

下面是我的控制器的一些代码:

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 记录。

【讨论】:

以上是关于在 CakePHP 中保存新的关联记录的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP HABTM 关系保存新的关联

cakephp 3.0 - 保存独特的关联

CakePHP 模型关联 HasMany - 保存错误

CakePHP 3.0 保存我的关联数据

在 CakePHP 3 中保存 belongsToMany 关联

在 CakePHP 中保存时如何验证关联模型是不是存在