【问题标题】:cakephp update datacakephp 更新数据
【发布时间】:2012-06-11 21:22:56
【问题描述】:

我在数据库中有 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'));

这是我的用户模型: 类用户扩展 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'
                        )
                    ); 

    }

请帮帮我

【问题讨论】:

    标签: cakephp-2.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*
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      • 2016-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多