1

我在数据库中有 2 个表:用户和配置文件。在一个页面中,我想查看所有用户及其与 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 extends 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'
                        )
                    ); 

    }

请帮帮我

4

1 回答 1

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*
}

此外,您可能想重新阅读博客教程。我为您指出了一个简单编辑功能的好例子。

于 2012-11-02T21:20:38.067 回答