我正在尝试保存属于其他模型的记录。然而,我得到一个错误,外键丢失了。 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数组中获取id。我可以让它工作的唯一方法是我手动将票证ID分配给消息数组。
$this->request->data['Message']['ticket_id'] = $this->request->data['Ticket']['id']
我不应该这样做。魔术在哪里?我已经阅读了至少20个类似的帖子,但没有一个完全像这样(可能因为这是非常基本的,没有人有这个问题,因为它适用于他们)。
我正在使用版本2.4.2
感谢您的帮助。
答案 0 :(得分:0)
在这种情况下不要使用Model :: save(),原因是您还要保存关联数据,以便保存主模型的数据及其需要使用的关联模型{{ 3}}
您的控制器应该看起来像这样
$this->Message->saveAssociated($this->request->data);