Почему CakePHP не имеет никакого обратного вызова для после saveAll и deleteAll, как beforeSave () и beforeDelete ()? Я знаю, что CakePHP использует foreach для deleteAll () и saveAll, которые используют стандартные функции delete () и save (). Но не использует ли он слишком много запросов, если я установил любую функцию, такую как afterSave (), beforeSave (), так как она будет выполняться каждый раз, когда будет выполняться функция save ().
Разве торт не требует отдельной функции для saveAll (), deleteAll ()? Поправьте меня если я ошибаюсь.
Как вы уже сказали, saveAll и deleteAll — это просто обертки save()
а также delete()
, Для этого это сработает beforeSave()
а также beforeDelete()
для каждой строки данных сохраняется или удаляется. Таким образом, добавление отдельных beforeSaveAll и beforeDeleteAll на самом деле не является необходимым. Да, он может выполнять много запросов, но это не должно быть проблемой. Он предлагает способ формирования каждой строки данных, которые сохраняются или удаляются, вместо того, чтобы выполнять одну отдельную массовую операцию, которая может либо работать, либо завершаться неудачей полностью (потому что все они зависят друг от друга, когда вы объединяете их в одну операцию).
Если вы хотите добавить любую собственную логику в каждый Действие saveAll и deleteAll (будьте уверены, что это именно то, что вам действительно нужно! И помните, что обычные beforeSave и beforeDelete будут вызываться до тех пор, пока вы не отключите обратные вызовы в каждом из saveAll и deleteAll), вы можете просто перезаписать методы с помощью собственной имплантации в ваш AppModel
и пусть он вызывает вашу собственную логику «до», например:
// Add your own custom deleteAll and saveAll to AppModel
public function deleteAll($conditions, $cascade = true, $callbacks = false) {
if ($this->beforeDeleteAll($conditions)) {
parent::deleteAll($conditions, $cascade, $callbacks);
} else {
return false;
}
}
public function saveAll($data = array(), $options = array()) {
if ($this->beforeSaveAll($data, $options)) {
parent::saveAll($data, $options);
} else {
return false;
}
}
// As well as your custom logic
public function beforeDeleteAll($conditions) {
// Do your stuff here
return true;
}
public function beforeSaveAll($data, $options) {
// Do your stuff here
return true;
}
Других решений пока нет …