2013-05-07 4 views
0

Итак, у меня есть модель Message. Когда создается сообщение, я хочу создать новые записи Recipient. (Message hasMany получатель, получатель принадлежит к сообщению).Сохранение новых связанных записей в CakePHP

Цель состоит в том, чтобы поле message_id в этих связанных записях автоматически заполнялось новым идентификатором Message.

Я пытался форматировать данные в разные стороны, и я в курсе saveAll и saveAssociated методов, но ничего не похоже на работу ... Вот что я предположил бы работать:

Данные передаются для сохранения:

[Message] => array 
    (
     [subject] => Foo bar 
     [body] => Blah blah blah. 
    ) 
[Recipient] => array 
    (
     [0] => array 
      (
       [user_id] => 1 
      ) 
     [1] => array 
      (
       [user_id] => 5 
      ) 
     [2] => array 
      (
       [user_id] => 6 
      ) 
    ) 

Использование saveMany, SaveAll, saveAssociated не похоже, чтобы сделать разницу (даже с 'глубокой' установлен верно).

+0

Есть ли правила проверки получателя? – Dave

+0

Нет! Ничего. Я могу сохранить штраф, когда я вручную сохраняю ... Я бы скорее сохранил свой код скудным и обычным. –

ответ

0

Несколько вещей:

1) Сообщение создаваемые был новый рекорд. Я понял, после этого у меня не было $this->Message->create() в моем контроллере. Теперь, с тех пор я пробовал без него, и все работает отлично, но я считаю, что лучше всего включить его.

2) Так как мне нужно сохранить несколько соответствующих записей, я должен использовать saveAll или saveMany, но делать это вызывало дополнительные пустые строки будут добавлены, так как основная запись не была численно индексированный (что saveAll хочет).

Так вот некоторый код из моего контроллера:

if ($this->request->is('post')) { 
    $this->Message->create(); 
    if ($this->Message->saveAll($data, array('deep' => true))) { 
     // code here 
    } 
} 

А вот как структурирована мои данные:

Array 
(
    [0] => Array 
     (
      [Message] => Array 
       (
        [subject] => Foo 
        [body] => bar 
        [Recipient] => Array 
         (
          [0] => Array 
           (
            [user_id] => 1 
           ) 
          [1] => Array 
           (
            [user_id] => 6 
           ) 
          [2] => Array 
           (
            [user_id] => 38 
           ) 
         ) 
       ) 
     ) 

)  

Это создаст новый Message и правильно связать вновь созданные Recipient записи.

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