Как вставить новую запись в связанную таблицу ownTo вместо редактирования связанной - PullRequest
0 голосов
/ 27 марта 2019

В редактируемом шаблоне я создал 2 формы. Первый, чтобы редактировать запись из «Table1» и вторая форма, чтобы добавить запись в связанную (ownTo) таблицу «Table2». Я не хочу редактировать связанную запись, но добавляю новую в Table2 и изменяю ключ привязки записи с 'Table1'.

В контроллере я использую patchEntity (), но таким образом редактируется исходная связанная запись в «Table2».

Код для второй формы выглядит следующим образом.

    <?= $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(); ?>

В контроллере для Table1 я использую что-то вроде этого.

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]);
        }
    }

}

Как я могу запретить контроллеру редактировать исходную запись и вместо этого принудительно добавить новую запись в 'Table2' и изменить ключ связывания в 'Table1'?

Помощь очень ценится.

добавлена ​​информация: данные, отправленные по форме, выглядят так:

[
    '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 голосов
/ 28 марта 2019

вместо

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

вы должны использовать

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

для сохранения данных. Если в моделях установлены правильные ассоциации между Table1 и Table2, это также приведет к обновлению ключей привязки.

Убедитесь, что формат идентификаторов в FormHelper правильный. См. Документы, как обрабатывать Сохранение с ассоциациями . Вы можете увидеть это в $data. При отправке формы $data должен иметь следующий формат:

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