public function __sleep()
{
// This metadata is always serialized/cached.
$serialized = array('fieldMappings', 'associationMappings', 'identifier', 'name', 'namespace', 'db', 'collection', 'writeConcern', 'rootDocumentName', 'generatorType', 'generatorOptions', 'idGenerator', 'indexes', 'shardKey');
// The rest of the metadata is only serialized if necessary.
if ($this->changeTrackingPolicy != self::CHANGETRACKING_DEFERRED_IMPLICIT) {
$serialized[] = 'changeTrackingPolicy';
}
if ($this->customRepositoryClassName) {
$serialized[] = 'customRepositoryClassName';
}
if ($this->inheritanceType != self::INHERITANCE_TYPE_NONE) {
$serialized[] = 'inheritanceType';
$serialized[] = 'discriminatorField';
$serialized[] = 'discriminatorValue';
$serialized[] = 'discriminatorMap';
$serialized[] = 'defaultDiscriminatorValue';
$serialized[] = 'parentClasses';
$serialized[] = 'subClasses';
}
if ($this->isMappedSuperclass) {
$serialized[] = 'isMappedSuperclass';
}
if ($this->isEmbeddedDocument) {
$serialized[] = 'isEmbeddedDocument';
}
if ($this->isQueryResultDocument) {
$serialized[] = 'isQueryResultDocument';
}
if ($this->isVersioned) {
$serialized[] = 'isVersioned';
$serialized[] = 'versionField';
}
if ($this->lifecycleCallbacks) {
$serialized[] = 'lifecycleCallbacks';
}
if ($this->file) {
$serialized[] = 'file';
}
if ($this->slaveOkay) {
$serialized[] = 'slaveOkay';
}
if ($this->distance) {
$serialized[] = 'distance';
}
if ($this->collectionCapped) {
$serialized[] = 'collectionCapped';
$serialized[] = 'collectionSize';
$serialized[] = 'collectionMax';
}
return $serialized;
}