在一个编辑模板中,我创建了2个表单。第一个编辑来自“ Table1”的记录,第二个窗体将记录添加到关联的(belongsTo)表“ Table2”。我不想编辑关联的记录,而是在Table2中添加一个新记录,并从“ Table1”中更改记录的绑定键。
在控制器中,我使用patchEntity(),但是这样可以编辑“表2”中的原始链接记录。
第二种形式的代码如下。
<?= $this->Form->create($machine, ['url' => ['action' => 'edit_foto']]);?>
<?= $this->Form->controls([
'id' => ['type' => 'hidden'],
'foto.omschrijving' => [
'type' => 'text',
'label' => __('naam van de machine'),
'value' => $result->type_machine
], []);?>
<?= $this->Form->button(__('save'), ['type' => 'submit']); ?>
<?= $this->Form->end(); ?>
在“表1”的控制器中,我使用类似的东西。
public function editFoto($id) {
$data = $this->getRequest()->getData();
$machine = $this->Machines->get($id, [
'contain' => [
'Foto'
]
]);
if ($this->request->is([
'patch',
'post',
'put'
])) {
$machine = $this->Machines->patchEntity($machine, $data);
if ($this->Machines->save($machine)) {
$this->Flash->success(__('Machine {naam} has been saved.', [
'naam' => $machine['naam']
]));
return $this->redirect(['action' => 'edit', $id]);
}
}
}
如何防止控制器编辑原始记录,而是强制在“表2”中添加新记录并在“表1”中更改绑定键?
非常感谢您的帮助。
添加的信息: 表单发送的数据如下:
[
'id' => '87',
'foto' => [
'omschrijving' => 'WAKER 135 - ter - testje',
'foto' => [
'tmp_name' => 'C:\xampp\tmp\php6CFD.tmp',
'error' => (int) 0,
'name' => 'MAKITA DTD153RTJ accuschroevendraaier.jpg',
'type' => 'image/jpeg',
'size' => (int) 188971
],
'dir_id' => '5c9dd428cc4ef'
]
]
答案 0 :(得分:0)
代替
$machine = $this->Machines->patchEntity($machine, $data);
$this->Machines->save($machine);
您应该使用
$machine = $this->Machines->newEntity($data, [
'associated' => ['Fotos']
]);
$this->Machines->save($machine);
保存数据。如果模型中Table1
和Table2
之间的关联正确,这还将更新绑定键。
请确保FormHelper中ID的格式正确。请参阅文档,了解如何处理Saving With Associations。您可以在$data
中看到此内容。提交表单时,$data
的格式应为:
$data = [
'id' => '...',
'foto' => [
// ... model data
],
];