Почему я не могу изменить данные другой модели в CakePHP - PullRequest
1 голос
/ 16 сентября 2010

У меня однозначное отношение между учетной записью и таблицей пользователей. Я пытаюсь выполнить предварительную обработку в beforeSave модели учетной записи, но, похоже, я могу изменить значения $this->data['Account'][...] а не $this->data['User'][...], почему так?

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_registration'] = 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;
}

Другой вопрос: как лучше всего проверить, обновляет ли пользователь или создает модель в событии beforeSave, проверьте empty($this->data['Account']['id']))?

Спасибо.

1 Ответ

1 голос
/ 16 сентября 2010

Оказалось, что это невозможно в CakePHP 1.3: http://cakephp.lighthouseapp.com/projects/42648/tickets/671-cant-modify-related-models-data-in-beforesave-when-using-saveall

Я перенес код на контроллер пользователя, однако на этот раз проблема в том, что я не могу напрямую получить доступ к $ this-> Account-> name, хотя могу получить доступ к $ this-> Account-> id, почему это так? я должен был сделать работу ниже:

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;
}
...