本文整理汇总了PHP中Doctrine\ODM\MongoDB\Mapping\ClassMetadata::invokeLifecycleCallbacks方法的典型用法代码示例。如果您正苦于以下问题:PHP ClassMetadata::invokeLifecycleCallbacks方法的具体用法?PHP ClassMetadata::invokeLifecycleCallbacks怎么用?PHP ClassMetadata::invokeLifecycleCallbacks使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Doctrine\ODM\MongoDB\Mapping\ClassMetadata
的用法示例。
在下文中一共展示了ClassMetadata::invokeLifecycleCallbacks方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: executeDeletions
/**
* Executes all document deletions for documents of the specified type.
*
* @param ClassMetadata $class
* @param array $documents Array of documents to delete
* @param array $options Array of options to be used with remove()
*/
private function executeDeletions(ClassMetadata $class, array $documents, array $options = array())
{
$hasPostRemoveLifecycleCallbacks = !empty($class->lifecycleCallbacks[Events::postRemove]);
$hasPostRemoveListeners = $this->evm->hasListeners(Events::postRemove);
$persister = $this->getDocumentPersister($class->name);
foreach ($documents as $oid => $document) {
if (!$class->isEmbeddedDocument) {
$persister->delete($document, $options);
}
unset($this->documentDeletions[$oid], $this->documentIdentifiers[$oid], $this->originalDocumentData[$oid]);
// Clear snapshot information for any referenced PersistentCollection
// http://www.doctrine-project.org/jira/browse/MODM-95
foreach ($class->associationMappings as $fieldMapping) {
if (isset($fieldMapping['type']) && $fieldMapping['type'] === ClassMetadata::MANY) {
$value = $class->reflFields[$fieldMapping['fieldName']]->getValue($document);
if ($value instanceof PersistentCollection) {
$value->clearSnapshot();
}
}
}
// Document with this $oid after deletion treated as NEW, even if the $oid
// is obtained by a new document because the old one went out of scope.
$this->documentStates[$oid] = self::STATE_NEW;
if ($hasPostRemoveLifecycleCallbacks) {
$class->invokeLifecycleCallbacks(Events::postRemove, $document);
}
if ($hasPostRemoveListeners) {
$this->evm->dispatchEvent(Events::postRemove, new LifecycleEventArgs($document, $this->dm));
}
}
}
示例2: _executeDeletions
/**
* Executes all document deletions for documents of the specified type.
*
* @param Doctrine\ODM\MongoDB\Mapping\ClassMetadata $class
*/
private function _executeDeletions($class)
{
$hasLifecycleCallbacks = isset($class->lifecycleCallbacks[Events::postRemove]);
$hasListeners = $this->_evm->hasListeners(Events::postRemove);
$className = $class->name;
$persister = $this->getDocumentPersister($className);
$collection = $this->_dm->getDocumentCollection($className);
foreach ($this->_documentDeletions as $oid => $document) {
if (get_class($document) == $className || $document instanceof Proxy && $document instanceof $className) {
$persister->delete($document);
unset($this->_documentDeletions[$oid], $this->_documentIdentifiers[$oid], $this->_originalDocumentData[$oid]);
// Document with this $oid after deletion treated as NEW, even if the $oid
// is obtained by a new document because the old one went out of scope.
$this->_documentStates[$oid] = self::STATE_NEW;
if ($hasLifecycleCallbacks) {
$class->invokeLifecycleCallbacks(Events::postRemove, $document);
}
if ($hasListeners) {
$this->_evm->dispatchEvent(Events::postRemove, new LifecycleEventArgs($document, $this->_dm));
}
}
}
}
示例3: executeInserts
/**
* Executes all document insertions for documents of the specified type.
*
* @param Doctrine\ODM\MongoDB\Mapping\ClassMetadata $class
* @param array $options Array of options to be used with batchInsert()
*/
private function executeInserts($class, array $options = array())
{
$className = $class->name;
$persister = $this->getDocumentPersister($className);
$collection = $this->dm->getDocumentCollection($className);
$hasLifecycleCallbacks = isset($class->lifecycleCallbacks[Events::postPersist]);
$hasListeners = $this->evm->hasListeners(Events::postPersist);
if ($hasLifecycleCallbacks || $hasListeners) {
$documents = array();
}
$inserts = array();
foreach ($this->documentInsertions as $oid => $document) {
if (get_class($document) === $className) {
$persister->addInsert($document);
unset($this->documentInsertions[$oid]);
if ($hasLifecycleCallbacks || $hasListeners) {
$documents[] = $document;
}
}
}
$postInsertIds = $persister->executeInserts($options);
if ($postInsertIds) {
foreach ($postInsertIds as $pair) {
list($id, $document) = $pair;
$oid = spl_object_hash($document);
$class->setIdentifierValue($document, $id);
$this->documentIdentifiers[$oid] = $id;
$this->documentStates[$oid] = self::STATE_MANAGED;
$this->originalDocumentData[$oid][$class->identifier] = $id;
$this->addToIdentityMap($document);
if ($hasLifecycleCallbacks || $hasListeners) {
if ($hasLifecycleCallbacks) {
$class->invokeLifecycleCallbacks(Events::postPersist, $document);
}
if ($hasListeners) {
$this->evm->dispatchEvent(Events::postPersist, new LifecycleEventArgs($document, $this->dm));
}
}
$this->cascadePostPersist($class, $document);
}
}
}
示例4: preUpdate
/**
* Invokes preUpdate callbacks and events for given document cascading them to embedded documents as well.
*
* @param ClassMetadata $class
* @param object $document
*/
public function preUpdate(ClassMetadata $class, $document)
{
if (!empty($class->lifecycleCallbacks[Events::preUpdate])) {
$class->invokeLifecycleCallbacks(Events::preUpdate, $document, array(new PreUpdateEventArgs($document, $this->dm, $this->uow->getDocumentChangeSet($document))));
$this->uow->recomputeSingleDocumentChangeSet($class, $document);
}
$this->evm->dispatchEvent(Events::preUpdate, new PreUpdateEventArgs($document, $this->dm, $this->uow->getDocumentChangeSet($document)));
$this->cascadePreUpdate($class, $document);
}