开发者

Why I can't change the data of another model in CakePHP

I have a one-to-one relation between an Account and a User table, I'm trying to do all the pre-processing in the beforeSave of the account model, but it seems like i can only change the values of $this->data['Account'][...] and not $this->data['User'][...], why is so?

function beforeSave() {
  // Check if this is a create or update action
  if (empty($this->data['Account']['uid'])) {
    $this->data['Account']['uid'] = uniqid();
    $this->data['Account']['date_registrati开发者_运维问答on'] = date('Y-m-d');
    $this->data['Account']['state'] = 1;

    // this won't work
    $this->data['User']['password'] = Security::hash($this->data['User']['password'], null, true);
  }
  return true;
}

Another question is what's the best way to check if the user is updating or creating the model in the beforeSave event, check for empty($this->data['Account']['id'])) ?

Thanks.


It turned out it's not possible in CakePHP 1.3: http://cakephp.lighthouseapp.com/projects/42648/tickets/671-cant-modify-related-models-data-in-beforesave-when-using-saveall

I moved the code to the User controller, however this time the problem is i can't directly access $this->Account->name, although i can access $this->Account->id, why is that? i had to do the workareound below:

function beforeSave() {

    if (empty($this->date['User']['id'])){
        $this->data['User']['password'] = Security::hash($this->data['User']['password'], null, true);

        // Username is inherited from the account name
        // TODO: the field needs to be removed, depending whether the Auth component will play nicely
        $account_name = $this->Account->read('name',$this->Account->id);
        $this->data['User']['username'] = $account_name['Account']['name'];
    }
    return true;
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜