2013-09-26 68 views
0

我有以下數據,控制器和模型,我需要將它們保存在一起。 Foo保存,然後Bar,但deep選項seens不工作時保存Baz無法從控制器深度保存3個級別

數據

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 

Databa SE FK

Foo 
Bar.foo_id 
Baz.bar_id 

getDatasource()->getLog()消息說,無法保存,因爲外鍵。顯然Baz無法從保存的Bar中獲得fk。

我真的找不到問題所在。

回答

2

從層級上看,它應該是$this->Foo->Bar->saveAll($data, array('deep', true));,'ddep'或者是這裏的拼寫錯誤,或者應該更改爲'深'。如果你的模型沒問題,CakePHP應該正確地保護數據。

在安全要求中,Foo和Baz確實沒有直接關係,因此fk投訴。或者你已經在SQL級別上創建了外鍵,這是不太可能的。

+0

'ddep'在這裏只是一個錯字; D –

+0

我需要先在'Bar'('Bar.foo_id')中創建'Foo'來使用fK,所以不能顛倒保存順序。 –

+1

Weel,我三重檢查了我的模型,並注意到一個fk被命名爲錯誤。謝謝! –

1

它認爲HasOne之一的關係有一個錯誤的命名。 解決!