cakephp更新数据

时间:2012-06-11 21:22:56

标签: cakephp-2.1

我在数据库中有2个表:User和Profile。 在页面中,我希望通过user_id查看其配置文件关联的所有用户。 问题是当我更新记录cakephp更新只有表用户而不是配置文件表..现在我很困惑,但这是我在UsersController中更新的代码

$this->User->id = $this->request->data['User']['id'];
                if (!$this->User->exists()) {
                    $this->Session->setFlash('Nessun utente trovato con questa corrispondenza');
                }
                if ($this->User->save($this->request->data)) {
                    $this->Session->setFlash('Modifica avvenute con successo');
                    $this->redirect(array('action'=>'index'));
                } 
                else {
                    debug($this->User->invalidFields());
                    $this->Session->setFlash('Errore di salvataggio dati, prova di nuovo');
                }
                $this->redirect(array('action'=>'index'));

这是我的用户模型: class User扩展AppModel {

public $name = 'User'; 
        public $hasOne = array(
            'Profile' => array('className'    => 'Profile',
            'conditions' => '',
            'dependant' => true,
            'foreignKey'   => 'user_id',
            'associatedKey'   => 'user_id'
            )
    );

        public $validate = array(
            'username' => array(
                'non_vuoto' => array(
                    'rule'=> 'notEmpty',//non è vuoto metodo che eredito da appmodel
                    'message'=> 'Lo username non può essere vuoto'  
                ),
                'stringa_alfanumerica' => array(
                    'rule'=> 'alphaNumeric',//alpha numerico
                    'message'=> 'Lo username deve essere alfanumerica'  
                )
            ),
            'password' => array(
                'non_vuoto' => array(
                    'rule'=> 'notEmpty',//non è vuoto metodo che eredito da appmodel
                    'message'=> 'La password non può essere vuota'  
                ),
                'min_lunghezza' => array(
                    'rule' => array('minLength',5),
                    'message' => 'La password deve contenere almeno 5 caratteri'
                ),
                'max_lunghezza' => array(
                    'rule' => array('maxLength',15),
                    'message' => 'La password deve contenere al massimo 15 caratteri'
                ),
                'password_uguale' => array(
                    'rule' => 'matchPasswords',
                    'message' => 'Le password inserite non coincidono'
                )
            ),
            'password_confirm' => array(
                'non_vuoto' => array(
                    'rule'=> 'notEmpty',//non è vuoto metodo che eredito da appmodel
                    'message'=> 'La password non può essere vuota'  
                )           
            ),
            'email' => array(
                'email_non_valida' => array(
                    'rule' => 'email',
                    'message' => 'L\'email inserita non è valida'
                ),
                'email_univoca' => array(
                    'rule' => 'isUnique',
                    'message' => 'Questa email inserita è già presente nel database'
                )
            ),
            'activation_key' => array(
                'stringa_alfanumerica' => array(
                    'rule' => 'alphaNumeric',//alpha numerico
                    'message'=> 'La chiave di attivazione non è valida'
                ),
                'lunghezza campo' => array(
                    'rule' => array('between',40,40),
                    'message'=> 'La chiave di attivazione non è valida'
                )           
            ),
            'url' => array(
                'url' => array(
                    'rule' => array('url',true), //invalida i protocolli http e https
                    'allowEmpty' => true, //dico che può essere anche vuoto
                    'message' => 'L\'url inserito non è valido'
                )
            ),
            'description' => array(
                'max_lunghezza' => array(
                    'rule' => array('maxLenght',100),
                    'allowEmpty' => true,
                    'message' => 'La descrizione è troppo lunga'
                )
            )
        );

        //metodo mio dichiarato
        public function matchPasswords($data){
            //Il primo dato non è criptato se è nella variabile data se utilizzavo il this lui vede il campo password e quindi prendo il campo che ho diciharato
            if ($data['password']==$this->data['User']['password_confirm']){
                return true;
            }
            //mando l'errore se non coincidono gli dico invalidami quel campo
            $this->invalidate('password_confirm','Le due password non coincidono');
            return false;
        }

        //metodo automatico non necessario avviene sempre prima del salvataggio in questo caso
        public function beforeSave(){
            //se trova il campo password cripta
            if (isset($this->data['User']['password'])){
                $this->data['User']['password']=AuthComponent::password($this->data['User']['password']);
            }
            return true;
        }

    }
?>

我无法更新用户的个人资料?

我尝试为此配置文件创建模型,但没有

class Profile extends AppModel{
        public $name = 'Profile'; 
        var $belongsTo = array('User' =>
                        array(
                            'foreignKey' => 'user_id'
                        )
                    ); 

    }

请帮帮我

1 个答案:

答案 0 :(得分:1)

在最顶层的代码块中,您没有对配置文件进行任何引用,因此它是正确的,您不会更新任何内容。

至少你必须有这样的东西:

loadModel("Profile"); //not necessary
$this->Profile->find('first', array('conditions' => array('user_id'=>'user_id')));
$this->Profile->save($data_you_want_to_save);

如果这没有帮助,我建议发布这样的整个功能代码并澄清你的问题:

public function update($user_id) {
    *your code should be here so we know what function you are in*
}

您也可以重新阅读blog tutorial。我指出了一个简单的编辑功能的好例子。