2013-09-26 3 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 се Fk

Foo 
Bar.foo_id 
Baz.bar_id 

getDatasource()->getLog() сообщение говорит, что не может сохранить из-за внешнего ключа. Очевидно, Baz не может получить fk из сохраненного Bar.

Я действительно не могу найти, что не так.

ответ

2

Иерархично видно, что это должно быть $this->Foo->Bar->saveAll($data, array('deep', true));, а 'ddep' здесь либо опечатка, либо его нужно заменить на 'deep'. Если ваша модель в порядке, CakePHP должен правильно хранить данные.

В безопасном запросе нет действительно прямых отношений между Foo и Baz, следовательно, жалоба fk. Или вы сделали внешний ключ на уровне SQL, что маловероятно.

+0

'ddep' только опечатка; D –

+0

Мне нужно создать' Foo' сначала, чтобы использовать fK внутри 'Bar' (' Bar.foo_id'), поэтому он не может инвертировать порядок сохранения. –

+1

Weel, я triple проверил мою модель, и seens, что один fk назван неправильным. Благодаря! –

1

Это отношение к одному из HasOne имеет отношение fk неправильно. РЕШЕННЫЙ!

Смежные вопросы