Empty template method to provide concrete Record classes with the possibility
to hook into the deletion procedure.
public preDelete ( $event ) |
/** * deletes this data access object and all the related composites * this operation is isolated by a transaction * * this event can be listened by the onPreDelete and onDelete listeners * * @return boolean true on success, false on failure */ public function delete(Doctrine_Record $record) { if (!$record->exists()) { return false; } $this->conn->beginTransaction(); $event = new Doctrine_Event($this, Doctrine_Event::RECORD_DELETE); $record->preDelete($event); $record->state(Doctrine_Record::STATE_LOCKED); $this->deleteComposites($record); $record->state(Doctrine_Record::STATE_TDIRTY); if (!$event->skipOperation) { $this->conn->transaction->addDelete($record); $record->state(Doctrine_Record::STATE_TCLEAN); } $record->postDelete($event); $this->conn->commit(); return true; }
/** * Invokes preDelete event listeners. * * @return boolean Whether a listener has used it's veto (don't delete!). */ private function _preDelete(Doctrine_Record $record) { $event = new Doctrine_Event($record, Doctrine_Event::RECORD_DELETE); $record->preDelete($event); $record->getTable()->getRecordListener()->preDelete($event); return $event->skipOperation; }
/** * deletes given record and all the related composites * this operation is isolated by a transaction * * this event can be listened by the onPreDelete and onDelete listeners * * @return boolean true on success, false on failure */ public function delete(Doctrine_Record $record) { if (!$record->exists()) { return false; } $this->conn->beginTransaction(); $event = new Doctrine_Event($record, Doctrine_Event::RECORD_DELETE); $record->preDelete($event); $table = $record->getTable(); $table->getRecordListener()->preDelete($event); $state = $record->state(); $record->state(Doctrine_Record::STATE_LOCKED); $this->deleteComposites($record); if (!$event->skipOperation) { $record->state(Doctrine_Record::STATE_TDIRTY); if ($table->getOption('joinedParents')) { foreach ($table->getOption('joinedParents') as $parent) { $parentTable = $table->getConnection()->getTable($parent); $this->conn->delete($parentTable, $record->identifier()); } } $this->conn->delete($table, $record->identifier()); $record->state(Doctrine_Record::STATE_TCLEAN); } else { // return to original state $record->state($state); } $table->getRecordListener()->postDelete($event); $record->postDelete($event); $table->removeRecord($record); $this->conn->commit(); return true; }