我有以下数据,控制器和模型,我需要将它们全部保存在一起。保存Foo
,然后保存Bar
,但保存deep
时Baz
个选项无效。
数据
array(
'Foo' => array(
'field1' => 'data',
'field2' => 'data'
),
'Bar' => array(
(int) 0 => array(
'field1' => 'data',
'field2' => 'data',
'Baz' => array(
'field1' => 'data'
)
),
(int) 1 => array(
'field1' => 'data',
'field2' => 'data',
'Baz' => array(
'field1' => 'data'
)
)
[...]
)
)
控制器
$this->Bar->Foo->saveAll($data, array('deep', true));
模型
Bar belongsTo Foo
Foo hasMany Bar
Bar hasOne Baz
Baz belongsTo Bar
数据库fk
Foo
Bar.foo_id
Baz.bar_id
getDatasource()->getLog()
消息说由于外键无法保存。显然Baz
无法从保存的Bar
获取fk。
我真的找不到有什么问题。
答案 0 :(得分:2)
在层次上看,它应该是$this->Foo->Bar->saveAll($data, array('deep', true));
,而'ddep'在这里是一个拼写错误,或者应该更改为'deep'。如果你的模型没问题,CakePHP应该正确保护数据。
在安全请求中,Foo和Baz之间确实没有直接关系,因此fk投诉。或者你在SQL级别上创建了一个非常不可能的外键。
答案 1 :(得分:1)
HasOne
之间的关系似乎有一个错误命名。的解决!强>