如何在关联的belongsTo表中插入新记录,而不是编辑关联的表

时间:2019-03-27 13:36:25

标签: cakephp cakephp-3.0

在一个编辑模板中,我创建了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'
    ]
]

1 个答案:

答案 0 :(得分:0)

代替

$machine = $this->Machines->patchEntity($machine, $data);
$this->Machines->save($machine);

您应该使用

$machine = $this->Machines->newEntity($data, [
  'associated' => ['Fotos']
]);
$this->Machines->save($machine);

保存数据。如果模型中Table1Table2之间的关联正确,这还将更新绑定键。

请确保FormHelper中ID的格式正确。请参阅文档,了解如何处理Saving With Associations。您可以在$data中看到此内容。提交表单时,$data的格式应为:

$data = [
  'id' => '...',
  'foto' => [
    // ... model data
  ],
];