我在数据库中有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'
)
);
}
请帮帮我
答案 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。我指出了一个简单的编辑功能的好例子。