Skip to content
Advertisement

CakePHP4 Edit doesnt update record

Version: 4.2.9

My edit view is populating my inputs with the data, but when I change them and click on save, its not saving but giving me “user has been saved” message.

UsersController.php edit function

    public function edit($id = null)
    {
        $user = $this->Users->get($id, [
            'contain' => ['Userdata'],
        ]);
        if ($this->request->is(['post', 'put'])) {
          $user = $this->Users->get($id, [
              'contain' => ['Userdata'],
          ]);
            if ($this->Users->save($user)) {
                $this->Flash->success(__('The user has been saved.'));

                return $this->redirect(['action' => 'index']);
            }
            $this->Flash->error(__('The user could not be saved. Please, try again.'));
        }
        $this->set(compact('user'));
    }

my edit.php

<div class="users form large-9 medium-8 columns content">
    <?php echo $this->Form->create($user) ?>
    <fieldset>
        <legend><?= __('Edit User') ?></legend>
        <?php
            echo $this->Form->control('userdata.Email');
            echo $this->Form->control('userdata.UserName');
            echo $this->Form->control('PasswordHashed', ['type' => 'password']);
        ?>
    </fieldset>
    <?= $this->Form->button(__('save')) ?>
    <?= $this->Form->end() ?>
</div>

Advertisement

Answer

Your update code is not complete, you have omitted the patchEntity method.

public function edit($id = null)
{
    // call query only once
    $user = $this->Users->get($id, [
        'contain' => ['Userdata'],
    ]);
    // Call the debug method just to test and understand your data
    // debug($user);
    // debug($this->getRequest()->getData()); // debug posted data
    if ($this->request->is(['post', 'put'])) {
      $user = $this->Users->patchEntity($user, $this->getRequest()->getData());
        // debug patched data debug($user); exit;
        if ($this->Users->save($user)) {
            $this->Flash->success(__('The user has been saved.'));

            return $this->redirect(['action' => 'index']);
        }
        $this->Flash->error(__('The user could not be saved. Please, try again.'));
    }
    $this->set(compact('user'));
}
User contributions licensed under: CC BY-SA
6 People found this is helpful
Advertisement