0

我有以下数据、控制器和模型,我需要将它们保存在一起。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无法从 saved 中获取 fk Bar

我真的找不到问题所在。

4

2 回答 2

2

从层次上看它应该是$this->Foo->Bar->saveAll($data, array('deep', true));,“ddep”在这里要么是错字,要么应该改为“deep”。如果您的模型很好,CakePHP 应该正确地保护数据。

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

于 2013-09-26T13:55:45.810 回答
1

HasOne看到一个 的关系有一个 fk 错误命名。解决了!

于 2013-09-26T14:03:57.877 回答