проблема с обновлением в cakephp - PullRequest
0 голосов
/ 07 января 2011

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

function admin()
{       
    $conditions = "id";
    $recursive = 1;
    $data = $this->User->find('all');
    $counter = $this->User->find('count');
    $this->set('counter', $counter);
    $this->set('combo', $data);

    $username = $this->Session->read('user');
    if ($username)
    {
        $results = $this->User->findByUsername($username);
        $this->set('User', $results['User']);
        $this->set('last_login', $this->Session->read('last_login'));
        if (!empty($this->data))
        {


            $this->data["User"]["access_right"] = implode(",",$this->data["User"]["access_right"]);
            $this->User->set($this->data);
            if ($this->User->validates())
            {                    
               $this->data['User']['password'] = md5($this->data['User']['password']);
               if($this->User->saveAll($this->data, TRUE, array('username','password','first_name','last_name','notes','access_right')))
               {
                  $this->redirect(array('action' => 'admin'));
                  $this->Session->setFlash('User Data Updated.');
               }
               else
               {
                  $this->Session->setFlash('There was a problem while Updating User.');
               }                    
            }
        }
    }
    else
    {
        $this->redirect(array('action' => 'login'));
        exit();
    }        
}

а это моя модель

<?php
class User extends AppModel
{
    var $name = 'User';
    var $validate = array(
        'username'=>array(
                  /* 'alphaNumeric'=>array(
                'rule'=>'alphaNumeric',
                'required'=>true,
                'message'=>'Alphabets and numbers only'
                ), */
            'between'=>array(
                'rule'=>array('between', 5, 15),
                'message'=>'Between 5 and 15 characters'
            )
        ),
        'password'=>array(
            'rule'=>array('minLength', 8),
            'required'=>true,
            'message'=>'Minimum 8 characters long'
        ),
        'email'=>'email'
    );
}

?>

1 Ответ

1 голос
/ 07 января 2011

Создание или обновление контролируется полем id модели. Если задано $ Model-> id, запись с этим первичным ключом обновляется. В противном случае создается новая запись. Вы можете проверить, содержит ли $ this-> data: $ this-> data ['User'] ['id']. Если это не так, именно поэтому он создает новую запись. Чтобы это исправить, вы можете сделать что-то вроде:

$this->data['User']['id'] = $this->Session->read('user_id');

Это, конечно, если вы храните его в сеансе. В противном случае вам может потребоваться обновить форму в представлении, чтобы сохранить скрытое поле для идентификатора пользователя. Однако это не так безопасно, как переменная, хранимая в сеансе, в зависимости от ваших потребностей в безопасности - скрывать идентификатор пользователя или нет.

Счастливого кодирования!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...