无法从控制器深度保存3级

时间:2013-09-26 13:29:06

标签: php cakephp database-design model cakephp-2.0

我有以下数据,控制器和模型,我需要将它们全部保存在一起。保存Foo,然后保存Bar,但保存deepBaz个选项无效。

数据

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。

我真的找不到有什么问题。

2 个答案:

答案 0 :(得分:2)

在层次上看,它应该是$this->Foo->Bar->saveAll($data, array('deep', true));,而'ddep'在这里是一个拼写错误,或者应该更改为'deep'。如果你的模型没问题,CakePHP应该正确保护数据。

在安全请求中,Foo和Baz之间确实没有直接关系,因此fk投诉。或者你在SQL级别上创建了一个非常不可能的外键。

答案 1 :(得分:1)

HasOne之间的关系似乎有一个错误命名。的解决!