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