Как я могу узнать, есть ли я в beforeSave из редактирования или создания? CakePHP

У меня есть модель, где мне нужно выполнить некоторую обработку перед сохранением (или в некоторых случаях с редактированием), но обычно не при редактировании. Фактически, если я делаю обработку большинства изменений, результирующее поле будет неправильным. Прямо сейчас, я работаю в обратном вызове beforeSave модели. Как я могу узнать, пришел ли я из редактирования или добавил?

Фрэнк Люк

Ответ 1

function beforeSave() {
  if (!$this->id && !isset($this->data[$this->alias][$this->primaryKey])) {
    // insert
  } else {
    // edit
  }
  return true;
}

Ответ 2

Это в основном то же самое, что и ответ Neilcrookes, за исключением того, что я использую empty() в качестве теста, в отличие от !isset().

Если ключ массива существует, но пуст, то! isset вернет false, а пустой вернет true.

Мне нравится использовать тот же файл вида для добавления и редактирования, чтобы сохранить мой код DRY, а это значит, что при добавлении записи ключ "id" по-прежнему будет установлен, но ничего не будет содержать. Торт обрабатывает этот штраф, кроме версии neilcrookes кода не будет распознавать его как добавление, так как ключ primaryKey устанавливается в массиве данных (хотя он ничего не содержит). Итак, изменение! Isset для пустых учетных записей для этого случая.

function beforeSave() {
  if (!$this->id && empty($this->data[$this->alias][$this->primaryKey])) {
    // insert
  } else {
    // edit
  }
  return true;
}