所以我有一个Message
模型。创建消息时,我想创建新的Recipient
记录。 (消息hasMany Recipient,Recipient belongsTo Message)。
目的是使用新的message_id
ID自动填充这些关联记录中的Message
字段。
我尝试按照哪种方式格式化数据,并且了解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)。
答案 0 :(得分: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
记录。