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


Can't save 3 level deeply from controller

>我有以下数据,控制器和模型,我需要将它们一起保存。 保存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.

我真的找不到哪里出了问题。

层次结构上看,它应该是$this->Foo->Bar->saveAll($data, array('deep', true));的,而"ddep"在这里要么是一个错字,要么应该改为"deep"。如果你的模型没问题,CakePHP 应该可以正确保护数据。

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

它看到HasOne的一个关系有一个错误的名字。解决!