在 CakePHP 中保存新的关联记录
Posted
技术标签:
【中文标题】在 CakePHP 中保存新的关联记录【英文标题】:Saving new associated records in CakePHP 【发布时间】:2013-05-07 00:04:54 【问题描述】:所以我有一个Message
模型。创建消息时,我想创建新的Recipient
记录。 (消息有很多收件人,收件人属于消息)。
目的是这些关联记录中的message_id
字段会自动填充新的Message
id。
我尝试过以各种方式格式化数据,并且知道 saveAll
和 saveAssociated
方法,但似乎没有任何效果...这是我认为可行的方法:
要保存的数据:
[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) 由于我需要保存多个关联记录,我必须使用 saveAll
或 saveMany
但这样做会导致添加额外的空白行,因为主记录没有数字索引(这就是 @ 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 中保存新的关联记录的主要内容,如果未能解决你的问题,请参考以下文章