CakePHP: всегда использовать clear() вместо create()?

есть небольшая, но очень важная разница между вызовами clear() и create() внутри цикла:

предположим следующий код:

foreach ($posts as $post) {
  $this->Post->create();
  $this->Post->id = $post['Post']['id'];
  $this->Post->save(['column3' => 'foo', 'column4' => 'bar']);
}

При выполнении create(): столбец 1, который по умолчанию может иметь логическое значение false, также волшебным образом добавляется в обновляемые поля и может привести к потере данных (подумайте о публикации с column1 = true).

При выполнении clear() вместо create(): столбец 1, который не упоминается в инструкции сохранения, вообще не трогается.

Итак, всегда ли безопасно полагаться на clear() в foreach, где существующие данные частично обновляются?

Вторая часть моего вопроса: ВСЕГДА лучше полагаться на clear()? (Глядя на код clear(), вы видите, что это всего лишь удобная оболочка для create(false)). И единственная разница в create() и create(false) это инициализация значений по умолчанию. Я думаю, что значения по умолчанию лучше устанавливать непосредственно на уровне базы данных.

Кстати: я только что предложил небольшое изменение документа. Не стесняйтесь +1 это:


person Johannes N.    schedule 24.06.2014    source источник


Ответы (1)


Итак, всегда ли безопасно полагаться на clear() в foreach, где существующие данные частично обновляются?

Да.

Всегда ли лучше полагаться на clear()?

Единственным преимуществом использования create() при добавлении записей является то, что ваша форма будет предварительно заполнена значениями по умолчанию, которые будут показаны пользователю. Так что, если вас это не волнует, вы всегда можете использовать clear().

person ADmad    schedule 24.06.2014
comment
ваша форма будет предварительно заполнена значениями по умолчанию, которые будут показаны пользователю -- не могли бы вы уточнить? - person aexl; 20.12.2016