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'));

これが私の User モデルです: 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 に答える