Я пытаюсь сохранить запись, принадлежащую другой модели. Тем не менее, я получаю сообщение об ошибке, что внешний ключ отсутствует. Документы CakePHP показывают примеры этой работы, но я не могу заставить ее работать.
Вот форма:
echo $this->Form->create('Message', array('action'=>'add'));
echo $this->Form->hidden('Ticket.id');
echo $this->Form->input('Message.message');
echo $this->Form->submit('Save Message');
echo $this->Form->end();
Вот что возвращается контроллеру при отправке:
Array(
[Ticket] => Array
(
[id] => 2
)
[Message] => Array
(
[message] => Message text
)
)
Вот моя модель сообщения:
class Message extends AppModel {
public $belongsTo = array('Ticket');
}
Вот моя модель билета:
class Ticket extends AppModel {
public $hasMany = 'Message';
}
Вот моя логика контроллера:
$this->Message->save($this->request->data);
Вот сообщение об ошибке, которое я получаю:
Error: SQLSTATE[HY000]: General error: 1364 Field 'ticket_id' doesn't have a default value
В документах CakePHP довольно ясно сказано, что Cake получит идентификатор из массива Ticket. Единственный способ, которым я могу заставить это работать, - это вручную назначить идентификатор билета массиву сообщений.
$this->request->data['Message']['ticket_id'] = $this->request->data['Ticket']['id']
Я не должен был этого делать. Где магия? Я прочитал по крайней мере 20 подобных сообщений, но ни один из них не был похож на этот (вероятно, потому что это настолько просто, что ни у кого нет этой проблемы, потому что это работает для них).
Я использую версию 2.4.2
Спасибо за любую помощь.