Showing preview only (6,911K chars total). Download the full file or copy to clipboard to get everything.
Repository: doctrine/orm
Branch: 3.6.x
Commit: 27c33cf88dde
Files: 1645
Total size: 6.3 MB
Directory structure:
gitextract_zhimkn3r/
├── .doctrine-project.json
├── .gitattributes
├── .github/
│ ├── PULL_REQUEST_TEMPLATE/
│ │ ├── Failing_Test.md
│ │ ├── Improvement.md
│ │ └── New_Feature.md
│ ├── dependabot.yml
│ └── workflows/
│ ├── coding-standards.yml
│ ├── composer-lint.yml
│ ├── continuous-integration.yml
│ ├── documentation.yml
│ ├── phpbench.yml
│ ├── release-on-milestone-closed.yml
│ ├── stale.yml
│ ├── static-analysis.yml
│ └── website-schema.yml
├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── UPGRADE.md
├── ci/
│ └── github/
│ └── phpunit/
│ ├── mysqli.xml
│ ├── pdo_mysql.xml
│ ├── pdo_pgsql.xml
│ ├── pdo_sqlite.xml
│ ├── pgsql.xml
│ └── sqlite3.xml
├── composer.json
├── docs/
│ ├── .gitignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── composer.json
│ └── en/
│ ├── cookbook/
│ │ ├── advanced-field-value-conversion-using-custom-mapping-types.rst
│ │ ├── aggregate-fields.rst
│ │ ├── custom-mapping-types.rst
│ │ ├── decorator-pattern.rst
│ │ ├── dql-custom-walkers/
│ │ │ └── InterpolateParametersSQLOutputWalker.php
│ │ ├── dql-custom-walkers.rst
│ │ ├── dql-user-defined-functions.rst
│ │ ├── entities-in-session.rst
│ │ ├── generated-columns/
│ │ │ ├── Article.php
│ │ │ └── Person.php
│ │ ├── generated-columns.rst
│ │ ├── implementing-arrayaccess-for-domain-objects.rst
│ │ ├── mysql-enums.rst
│ │ ├── resolve-target-entity-listener.rst
│ │ ├── sql-table-prefixes.rst
│ │ ├── strategy-cookbook-introduction.rst
│ │ ├── validation-of-entities.rst
│ │ └── working-with-datetime.rst
│ ├── index.rst
│ ├── reference/
│ │ ├── advanced-configuration.rst
│ │ ├── architecture.rst
│ │ ├── association-mapping.rst
│ │ ├── attributes-reference.rst
│ │ ├── basic-mapping/
│ │ │ ├── DefaultValues.php
│ │ │ └── default-values.xml
│ │ ├── basic-mapping.rst
│ │ ├── batch-processing.rst
│ │ ├── best-practices.rst
│ │ ├── caching.rst
│ │ ├── change-tracking-policies.rst
│ │ ├── configuration.rst
│ │ ├── dql-doctrine-query-language.rst
│ │ ├── events.rst
│ │ ├── faq.rst
│ │ ├── filters.rst
│ │ ├── improving-performance.rst
│ │ ├── inheritance-mapping.rst
│ │ ├── installation.rst
│ │ ├── limitations-and-known-issues.rst
│ │ ├── metadata-drivers.rst
│ │ ├── namingstrategy.rst
│ │ ├── native-sql.rst
│ │ ├── partial-hydration.rst
│ │ ├── partial-objects.rst
│ │ ├── php-mapping.rst
│ │ ├── query-builder.rst
│ │ ├── second-level-cache.rst
│ │ ├── security.rst
│ │ ├── tools.rst
│ │ ├── transactions-and-concurrency.rst
│ │ ├── typedfieldmapper.rst
│ │ ├── unitofwork-associations.rst
│ │ ├── unitofwork.rst
│ │ ├── working-with-associations.rst
│ │ ├── working-with-objects.rst
│ │ └── xml-mapping.rst
│ ├── sidebar.rst
│ └── tutorials/
│ ├── composite-primary-keys.rst
│ ├── embeddables.rst
│ ├── extra-lazy-associations.rst
│ ├── getting-started.rst
│ ├── ordered-associations.rst
│ ├── override-field-association-mappings-in-subclasses.rst
│ ├── pagination.rst
│ ├── working-with-indexed-associations/
│ │ ├── Market.php
│ │ └── market.xml
│ └── working-with-indexed-associations.rst
├── doctrine-mapping.xsd
├── phpbench.json
├── phpcs.xml.dist
├── phpstan-baseline.neon
├── phpstan-dbal3.neon
├── phpstan-params.neon
├── phpstan.neon
├── phpunit.xml.dist
├── src/
│ ├── AbstractQuery.php
│ ├── Cache/
│ │ ├── AssociationCacheEntry.php
│ │ ├── CacheConfiguration.php
│ │ ├── CacheEntry.php
│ │ ├── CacheException.php
│ │ ├── CacheFactory.php
│ │ ├── CacheKey.php
│ │ ├── CollectionCacheEntry.php
│ │ ├── CollectionCacheKey.php
│ │ ├── CollectionHydrator.php
│ │ ├── ConcurrentRegion.php
│ │ ├── DefaultCache.php
│ │ ├── DefaultCacheFactory.php
│ │ ├── DefaultCollectionHydrator.php
│ │ ├── DefaultEntityHydrator.php
│ │ ├── DefaultQueryCache.php
│ │ ├── EntityCacheEntry.php
│ │ ├── EntityCacheKey.php
│ │ ├── EntityHydrator.php
│ │ ├── Exception/
│ │ │ ├── CacheException.php
│ │ │ ├── CannotUpdateReadOnlyCollection.php
│ │ │ ├── CannotUpdateReadOnlyEntity.php
│ │ │ ├── FeatureNotImplemented.php
│ │ │ ├── NonCacheableEntity.php
│ │ │ └── NonCacheableEntityAssociation.php
│ │ ├── Lock.php
│ │ ├── LockException.php
│ │ ├── Logging/
│ │ │ ├── CacheLogger.php
│ │ │ ├── CacheLoggerChain.php
│ │ │ └── StatisticsCacheLogger.php
│ │ ├── Persister/
│ │ │ ├── CachedPersister.php
│ │ │ ├── Collection/
│ │ │ │ ├── AbstractCollectionPersister.php
│ │ │ │ ├── CachedCollectionPersister.php
│ │ │ │ ├── NonStrictReadWriteCachedCollectionPersister.php
│ │ │ │ ├── ReadOnlyCachedCollectionPersister.php
│ │ │ │ └── ReadWriteCachedCollectionPersister.php
│ │ │ └── Entity/
│ │ │ ├── AbstractEntityPersister.php
│ │ │ ├── CachedEntityPersister.php
│ │ │ ├── NonStrictReadWriteCachedEntityPersister.php
│ │ │ ├── ReadOnlyCachedEntityPersister.php
│ │ │ └── ReadWriteCachedEntityPersister.php
│ │ ├── QueryCache.php
│ │ ├── QueryCacheEntry.php
│ │ ├── QueryCacheKey.php
│ │ ├── QueryCacheValidator.php
│ │ ├── Region/
│ │ │ ├── DefaultRegion.php
│ │ │ ├── FileLockRegion.php
│ │ │ └── UpdateTimestampCache.php
│ │ ├── Region.php
│ │ ├── RegionsConfiguration.php
│ │ ├── TimestampCacheEntry.php
│ │ ├── TimestampCacheKey.php
│ │ ├── TimestampQueryCacheValidator.php
│ │ └── TimestampRegion.php
│ ├── Cache.php
│ ├── Configuration.php
│ ├── Decorator/
│ │ └── EntityManagerDecorator.php
│ ├── EntityManager.php
│ ├── EntityManagerInterface.php
│ ├── EntityNotFoundException.php
│ ├── EntityRepository.php
│ ├── Event/
│ │ ├── ListenersInvoker.php
│ │ ├── LoadClassMetadataEventArgs.php
│ │ ├── OnClassMetadataNotFoundEventArgs.php
│ │ ├── OnClearEventArgs.php
│ │ ├── OnFlushEventArgs.php
│ │ ├── PostFlushEventArgs.php
│ │ ├── PostLoadEventArgs.php
│ │ ├── PostPersistEventArgs.php
│ │ ├── PostRemoveEventArgs.php
│ │ ├── PostUpdateEventArgs.php
│ │ ├── PreFlushEventArgs.php
│ │ ├── PrePersistEventArgs.php
│ │ ├── PreRemoveEventArgs.php
│ │ └── PreUpdateEventArgs.php
│ ├── Events.php
│ ├── Exception/
│ │ ├── ConfigurationException.php
│ │ ├── DuplicateFieldException.php
│ │ ├── EntityIdentityCollisionException.php
│ │ ├── EntityManagerClosed.php
│ │ ├── EntityMissingAssignedId.php
│ │ ├── InvalidEntityRepository.php
│ │ ├── InvalidHydrationMode.php
│ │ ├── ManagerException.php
│ │ ├── MissingIdentifierField.php
│ │ ├── MissingMappingDriverImplementation.php
│ │ ├── MultipleSelectorsFoundException.php
│ │ ├── NoMatchingPropertyException.php
│ │ ├── NotSupported.php
│ │ ├── ORMException.php
│ │ ├── PersisterException.php
│ │ ├── RepositoryException.php
│ │ ├── SchemaToolException.php
│ │ ├── UnexpectedAssociationValue.php
│ │ └── UnrecognizedIdentifierFields.php
│ ├── Id/
│ │ ├── AbstractIdGenerator.php
│ │ ├── AssignedGenerator.php
│ │ ├── BigIntegerIdentityGenerator.php
│ │ ├── IdentityGenerator.php
│ │ └── SequenceGenerator.php
│ ├── Internal/
│ │ ├── Hydration/
│ │ │ ├── AbstractHydrator.php
│ │ │ ├── ArrayHydrator.php
│ │ │ ├── HydrationException.php
│ │ │ ├── ObjectHydrator.php
│ │ │ ├── ScalarColumnHydrator.php
│ │ │ ├── ScalarHydrator.php
│ │ │ ├── SimpleObjectHydrator.php
│ │ │ └── SingleScalarHydrator.php
│ │ ├── HydrationCompleteHandler.php
│ │ ├── NoUnknownNamedArguments.php
│ │ ├── SQLResultCasing.php
│ │ ├── StronglyConnectedComponents.php
│ │ ├── TopologicalSort/
│ │ │ └── CycleDetectedException.php
│ │ ├── TopologicalSort.php
│ │ └── UnitOfWork/
│ │ └── InsertBatch.php
│ ├── LazyCriteriaCollection.php
│ ├── Mapping/
│ │ ├── AnsiQuoteStrategy.php
│ │ ├── ArrayAccessImplementation.php
│ │ ├── AssociationMapping.php
│ │ ├── AssociationOverride.php
│ │ ├── AssociationOverrides.php
│ │ ├── AttributeOverride.php
│ │ ├── AttributeOverrides.php
│ │ ├── Builder/
│ │ │ ├── AssociationBuilder.php
│ │ │ ├── ClassMetadataBuilder.php
│ │ │ ├── EmbeddedBuilder.php
│ │ │ ├── EntityListenerBuilder.php
│ │ │ ├── FieldBuilder.php
│ │ │ ├── ManyToManyAssociationBuilder.php
│ │ │ └── OneToManyAssociationBuilder.php
│ │ ├── Cache.php
│ │ ├── ChainTypedFieldMapper.php
│ │ ├── ChangeTrackingPolicy.php
│ │ ├── ClassMetadata.php
│ │ ├── ClassMetadataFactory.php
│ │ ├── Column.php
│ │ ├── CustomIdGenerator.php
│ │ ├── DefaultEntityListenerResolver.php
│ │ ├── DefaultNamingStrategy.php
│ │ ├── DefaultQuoteStrategy.php
│ │ ├── DefaultTypedFieldMapper.php
│ │ ├── DiscriminatorColumn.php
│ │ ├── DiscriminatorColumnMapping.php
│ │ ├── DiscriminatorMap.php
│ │ ├── Driver/
│ │ │ ├── AttributeDriver.php
│ │ │ ├── AttributeReader.php
│ │ │ ├── DatabaseDriver.php
│ │ │ ├── LoadMappingFileImplementation.php
│ │ │ ├── ReflectionBasedDriver.php
│ │ │ ├── RepeatableAttributeCollection.php
│ │ │ ├── SimplifiedXmlDriver.php
│ │ │ └── XmlDriver.php
│ │ ├── Embeddable.php
│ │ ├── Embedded.php
│ │ ├── EmbeddedClassMapping.php
│ │ ├── Entity.php
│ │ ├── EntityListenerResolver.php
│ │ ├── EntityListeners.php
│ │ ├── Exception/
│ │ │ ├── InvalidCustomGenerator.php
│ │ │ └── UnknownGeneratorType.php
│ │ ├── FieldMapping.php
│ │ ├── GeneratedValue.php
│ │ ├── GetReflectionClassImplementation.php
│ │ ├── HasLifecycleCallbacks.php
│ │ ├── Id.php
│ │ ├── Index.php
│ │ ├── InheritanceType.php
│ │ ├── InverseJoinColumn.php
│ │ ├── InverseSideMapping.php
│ │ ├── JoinColumn.php
│ │ ├── JoinColumnMapping.php
│ │ ├── JoinColumnProperties.php
│ │ ├── JoinColumns.php
│ │ ├── JoinTable.php
│ │ ├── JoinTableMapping.php
│ │ ├── LegacyReflectionFields.php
│ │ ├── ManyToMany.php
│ │ ├── ManyToManyAssociationMapping.php
│ │ ├── ManyToManyInverseSideMapping.php
│ │ ├── ManyToManyOwningSideMapping.php
│ │ ├── ManyToOne.php
│ │ ├── ManyToOneAssociationMapping.php
│ │ ├── MappedSuperclass.php
│ │ ├── MappingAttribute.php
│ │ ├── MappingException.php
│ │ ├── NamingStrategy.php
│ │ ├── OneToMany.php
│ │ ├── OneToManyAssociationMapping.php
│ │ ├── OneToOne.php
│ │ ├── OneToOneAssociationMapping.php
│ │ ├── OneToOneInverseSideMapping.php
│ │ ├── OneToOneOwningSideMapping.php
│ │ ├── OrderBy.php
│ │ ├── OwningSideMapping.php
│ │ ├── PostLoad.php
│ │ ├── PostPersist.php
│ │ ├── PostRemove.php
│ │ ├── PostUpdate.php
│ │ ├── PreFlush.php
│ │ ├── PrePersist.php
│ │ ├── PreRemove.php
│ │ ├── PreUpdate.php
│ │ ├── PropertyAccessors/
│ │ │ ├── EmbeddablePropertyAccessor.php
│ │ │ ├── EnumPropertyAccessor.php
│ │ │ ├── ObjectCastPropertyAccessor.php
│ │ │ ├── PropertyAccessor.php
│ │ │ ├── PropertyAccessorFactory.php
│ │ │ ├── RawValuePropertyAccessor.php
│ │ │ ├── ReadonlyAccessor.php
│ │ │ └── TypedNoDefaultPropertyAccessor.php
│ │ ├── QuoteStrategy.php
│ │ ├── ReflectionEmbeddedProperty.php
│ │ ├── ReflectionEnumProperty.php
│ │ ├── ReflectionReadonlyProperty.php
│ │ ├── SequenceGenerator.php
│ │ ├── Table.php
│ │ ├── ToManyAssociationMapping.php
│ │ ├── ToManyAssociationMappingImplementation.php
│ │ ├── ToManyInverseSideMapping.php
│ │ ├── ToManyOwningSideMapping.php
│ │ ├── ToOneAssociationMapping.php
│ │ ├── ToOneInverseSideMapping.php
│ │ ├── ToOneOwningSideMapping.php
│ │ ├── TypedFieldMapper.php
│ │ ├── UnderscoreNamingStrategy.php
│ │ ├── UniqueConstraint.php
│ │ └── Version.php
│ ├── NativeQuery.php
│ ├── NoResultException.php
│ ├── NonUniqueResultException.php
│ ├── ORMInvalidArgumentException.php
│ ├── ORMSetup.php
│ ├── OptimisticLockException.php
│ ├── PersistentCollection.php
│ ├── Persisters/
│ │ ├── Collection/
│ │ │ ├── AbstractCollectionPersister.php
│ │ │ ├── CollectionPersister.php
│ │ │ ├── ManyToManyPersister.php
│ │ │ └── OneToManyPersister.php
│ │ ├── Entity/
│ │ │ ├── AbstractEntityInheritancePersister.php
│ │ │ ├── BasicEntityPersister.php
│ │ │ ├── CachedPersisterContext.php
│ │ │ ├── EntityPersister.php
│ │ │ ├── JoinedSubclassPersister.php
│ │ │ └── SingleTablePersister.php
│ │ ├── Exception/
│ │ │ ├── CantUseInOperatorOnCompositeKeys.php
│ │ │ ├── InvalidOrientation.php
│ │ │ └── UnrecognizedField.php
│ │ ├── MatchingAssociationFieldRequiresObject.php
│ │ ├── PersisterException.php
│ │ ├── SqlExpressionVisitor.php
│ │ └── SqlValueVisitor.php
│ ├── PessimisticLockException.php
│ ├── Proxy/
│ │ ├── Autoloader.php
│ │ ├── DefaultProxyClassNameResolver.php
│ │ ├── InternalProxy.php
│ │ ├── NotAProxyClass.php
│ │ └── ProxyFactory.php
│ ├── Query/
│ │ ├── AST/
│ │ │ ├── ASTException.php
│ │ │ ├── AggregateExpression.php
│ │ │ ├── ArithmeticExpression.php
│ │ │ ├── ArithmeticFactor.php
│ │ │ ├── ArithmeticTerm.php
│ │ │ ├── BetweenExpression.php
│ │ │ ├── CoalesceExpression.php
│ │ │ ├── CollectionMemberExpression.php
│ │ │ ├── ComparisonExpression.php
│ │ │ ├── ConditionalExpression.php
│ │ │ ├── ConditionalFactor.php
│ │ │ ├── ConditionalPrimary.php
│ │ │ ├── ConditionalTerm.php
│ │ │ ├── DeleteClause.php
│ │ │ ├── DeleteStatement.php
│ │ │ ├── EmptyCollectionComparisonExpression.php
│ │ │ ├── EntityAsDtoArgumentExpression.php
│ │ │ ├── ExistsExpression.php
│ │ │ ├── FromClause.php
│ │ │ ├── Functions/
│ │ │ │ ├── AbsFunction.php
│ │ │ │ ├── AvgFunction.php
│ │ │ │ ├── BitAndFunction.php
│ │ │ │ ├── BitOrFunction.php
│ │ │ │ ├── ConcatFunction.php
│ │ │ │ ├── CountFunction.php
│ │ │ │ ├── CurrentDateFunction.php
│ │ │ │ ├── CurrentTimeFunction.php
│ │ │ │ ├── CurrentTimestampFunction.php
│ │ │ │ ├── DateAddFunction.php
│ │ │ │ ├── DateDiffFunction.php
│ │ │ │ ├── DateSubFunction.php
│ │ │ │ ├── FunctionNode.php
│ │ │ │ ├── IdentityFunction.php
│ │ │ │ ├── LengthFunction.php
│ │ │ │ ├── LocateFunction.php
│ │ │ │ ├── LowerFunction.php
│ │ │ │ ├── MaxFunction.php
│ │ │ │ ├── MinFunction.php
│ │ │ │ ├── ModFunction.php
│ │ │ │ ├── SizeFunction.php
│ │ │ │ ├── SqrtFunction.php
│ │ │ │ ├── SubstringFunction.php
│ │ │ │ ├── SumFunction.php
│ │ │ │ ├── TrimFunction.php
│ │ │ │ └── UpperFunction.php
│ │ │ ├── GeneralCaseExpression.php
│ │ │ ├── GroupByClause.php
│ │ │ ├── HavingClause.php
│ │ │ ├── IdentificationVariableDeclaration.php
│ │ │ ├── InListExpression.php
│ │ │ ├── InSubselectExpression.php
│ │ │ ├── IndexBy.php
│ │ │ ├── InputParameter.php
│ │ │ ├── InstanceOfExpression.php
│ │ │ ├── Join.php
│ │ │ ├── JoinAssociationDeclaration.php
│ │ │ ├── JoinAssociationPathExpression.php
│ │ │ ├── JoinClassPathExpression.php
│ │ │ ├── JoinVariableDeclaration.php
│ │ │ ├── LikeExpression.php
│ │ │ ├── Literal.php
│ │ │ ├── NewObjectExpression.php
│ │ │ ├── Node.php
│ │ │ ├── NullComparisonExpression.php
│ │ │ ├── NullIfExpression.php
│ │ │ ├── OrderByClause.php
│ │ │ ├── OrderByItem.php
│ │ │ ├── ParenthesisExpression.php
│ │ │ ├── PartialObjectExpression.php
│ │ │ ├── PathExpression.php
│ │ │ ├── Phase2OptimizableConditional.php
│ │ │ ├── QuantifiedExpression.php
│ │ │ ├── RangeVariableDeclaration.php
│ │ │ ├── SelectClause.php
│ │ │ ├── SelectExpression.php
│ │ │ ├── SelectStatement.php
│ │ │ ├── SimpleArithmeticExpression.php
│ │ │ ├── SimpleCaseExpression.php
│ │ │ ├── SimpleSelectClause.php
│ │ │ ├── SimpleSelectExpression.php
│ │ │ ├── SimpleWhenClause.php
│ │ │ ├── Subselect.php
│ │ │ ├── SubselectFromClause.php
│ │ │ ├── SubselectIdentificationVariableDeclaration.php
│ │ │ ├── TypedExpression.php
│ │ │ ├── UpdateClause.php
│ │ │ ├── UpdateItem.php
│ │ │ ├── UpdateStatement.php
│ │ │ ├── WhenClause.php
│ │ │ └── WhereClause.php
│ │ ├── Exec/
│ │ │ ├── AbstractSqlExecutor.php
│ │ │ ├── FinalizedSelectExecutor.php
│ │ │ ├── MultiTableDeleteExecutor.php
│ │ │ ├── MultiTableUpdateExecutor.php
│ │ │ ├── PreparedExecutorFinalizer.php
│ │ │ ├── SingleSelectExecutor.php
│ │ │ ├── SingleSelectSqlFinalizer.php
│ │ │ ├── SingleTableDeleteUpdateExecutor.php
│ │ │ └── SqlFinalizer.php
│ │ ├── Expr/
│ │ │ ├── Andx.php
│ │ │ ├── Base.php
│ │ │ ├── Comparison.php
│ │ │ ├── Composite.php
│ │ │ ├── From.php
│ │ │ ├── Func.php
│ │ │ ├── GroupBy.php
│ │ │ ├── Join.php
│ │ │ ├── Literal.php
│ │ │ ├── Math.php
│ │ │ ├── OrderBy.php
│ │ │ ├── Orx.php
│ │ │ └── Select.php
│ │ ├── Expr.php
│ │ ├── Filter/
│ │ │ ├── FilterException.php
│ │ │ ├── Parameter.php
│ │ │ └── SQLFilter.php
│ │ ├── FilterCollection.php
│ │ ├── Lexer.php
│ │ ├── OutputWalker.php
│ │ ├── Parameter.php
│ │ ├── ParameterTypeInferer.php
│ │ ├── Parser.php
│ │ ├── ParserResult.php
│ │ ├── Printer.php
│ │ ├── QueryException.php
│ │ ├── QueryExpressionVisitor.php
│ │ ├── ResultSetMapping.php
│ │ ├── ResultSetMappingBuilder.php
│ │ ├── SqlOutputWalker.php
│ │ ├── SqlWalker.php
│ │ ├── TokenType.php
│ │ ├── TreeWalker.php
│ │ ├── TreeWalkerAdapter.php
│ │ └── TreeWalkerChain.php
│ ├── Query.php
│ ├── QueryBuilder.php
│ ├── QueryType.php
│ ├── Repository/
│ │ ├── DefaultRepositoryFactory.php
│ │ ├── Exception/
│ │ │ ├── InvalidFindByCall.php
│ │ │ └── InvalidMagicMethodCall.php
│ │ └── RepositoryFactory.php
│ ├── Tools/
│ │ ├── AttachEntityListenersListener.php
│ │ ├── Console/
│ │ │ ├── ApplicationCompatibility.php
│ │ │ ├── Command/
│ │ │ │ ├── AbstractEntityManagerCommand.php
│ │ │ │ ├── ClearCache/
│ │ │ │ │ ├── CollectionRegionCommand.php
│ │ │ │ │ ├── EntityRegionCommand.php
│ │ │ │ │ ├── MetadataCommand.php
│ │ │ │ │ ├── QueryCommand.php
│ │ │ │ │ ├── QueryRegionCommand.php
│ │ │ │ │ └── ResultCommand.php
│ │ │ │ ├── Debug/
│ │ │ │ │ ├── AbstractCommand.php
│ │ │ │ │ ├── DebugEntityListenersDoctrineCommand.php
│ │ │ │ │ └── DebugEventManagerDoctrineCommand.php
│ │ │ │ ├── GenerateProxiesCommand.php
│ │ │ │ ├── InfoCommand.php
│ │ │ │ ├── MappingDescribeCommand.php
│ │ │ │ ├── MappingDescribeCommandFormat.php
│ │ │ │ ├── RunDqlCommand.php
│ │ │ │ ├── SchemaTool/
│ │ │ │ │ ├── AbstractCommand.php
│ │ │ │ │ ├── CreateCommand.php
│ │ │ │ │ ├── DropCommand.php
│ │ │ │ │ └── UpdateCommand.php
│ │ │ │ └── ValidateSchemaCommand.php
│ │ │ ├── ConsoleRunner.php
│ │ │ ├── EntityManagerProvider/
│ │ │ │ ├── ConnectionFromManagerProvider.php
│ │ │ │ ├── SingleManagerProvider.php
│ │ │ │ └── UnknownManagerException.php
│ │ │ ├── EntityManagerProvider.php
│ │ │ └── MetadataFilter.php
│ │ ├── Debug.php
│ │ ├── DebugUnitOfWorkListener.php
│ │ ├── Event/
│ │ │ ├── GenerateSchemaEventArgs.php
│ │ │ └── GenerateSchemaTableEventArgs.php
│ │ ├── Exception/
│ │ │ ├── MissingColumnException.php
│ │ │ └── NotSupported.php
│ │ ├── Pagination/
│ │ │ ├── CountOutputWalker.php
│ │ │ ├── CountWalker.php
│ │ │ ├── Exception/
│ │ │ │ └── RowNumberOverFunctionNotEnabled.php
│ │ │ ├── LimitSubqueryOutputWalker.php
│ │ │ ├── LimitSubqueryWalker.php
│ │ │ ├── Paginator.php
│ │ │ ├── RootTypeWalker.php
│ │ │ ├── RowNumberOverFunction.php
│ │ │ └── WhereInWalker.php
│ │ ├── ResolveTargetEntityListener.php
│ │ ├── SchemaTool.php
│ │ ├── SchemaValidator.php
│ │ ├── ToolEvents.php
│ │ └── ToolsException.php
│ ├── TransactionRequiredException.php
│ ├── UnexpectedResultException.php
│ ├── UnitOfWork.php
│ └── Utility/
│ ├── HierarchyDiscriminatorResolver.php
│ ├── IdentifierFlattener.php
│ ├── LockSqlHelper.php
│ └── PersisterHelper.php
└── tests/
├── .gitignore
├── Doctrine/
│ └── Tests/
│ └── ORM/
│ └── Functional/
│ ├── GH8011Test.php
│ └── Ticket/
│ ├── GH12063Test.php
│ └── LazyEagerCollectionTest.php
├── Performance/
│ ├── ChangeSet/
│ │ └── UnitOfWorkComputeChangesBench.php
│ ├── EntityManagerFactory.php
│ ├── Hydration/
│ │ ├── MixedQueryFetchJoinArrayHydrationPerformanceBench.php
│ │ ├── MixedQueryFetchJoinFullObjectHydrationPerformanceBench.php
│ │ ├── MixedQueryFetchJoinPartialObjectHydrationPerformanceBench.php
│ │ ├── SimpleHydrationBench.php
│ │ ├── SimpleInsertPerformanceBench.php
│ │ ├── SimpleQueryArrayHydrationPerformanceBench.php
│ │ ├── SimpleQueryFullObjectHydrationPerformanceBench.php
│ │ ├── SimpleQueryPartialObjectHydrationPerformanceBench.php
│ │ ├── SimpleQueryScalarHydrationPerformanceBench.php
│ │ ├── SingleTableInheritanceHydrationPerformanceBench.php
│ │ └── SingleTableInheritanceInsertPerformanceBench.php
│ ├── LazyLoading/
│ │ ├── ProxyInitializationTimeBench.php
│ │ └── ProxyInstantiationTimeBench.php
│ ├── Mock/
│ │ ├── NonLoadingPersister.php
│ │ ├── NonProxyLoadingEntityManager.php
│ │ └── NonProxyLoadingUnitOfWork.php
│ └── Query/
│ └── QueryBoundParameterProcessingBench.php
├── README.markdown
├── StaticAnalysis/
│ ├── Mapping/
│ │ └── class-metadata-constructor.php
│ ├── Tools/
│ │ └── Pagination/
│ │ └── paginator-covariant.php
│ └── get-metadata.php
├── Tests/
│ ├── DbalExtensions/
│ │ ├── Connection.php
│ │ ├── QueryLog.php
│ │ └── SqlLogger.php
│ ├── DbalTypes/
│ │ ├── CustomIdObject.php
│ │ ├── CustomIdObjectType.php
│ │ ├── CustomIntType.php
│ │ ├── GH8565EmployeePayloadType.php
│ │ ├── GH8565ManagerPayloadType.php
│ │ ├── NegativeToPositiveType.php
│ │ ├── Rot13Type.php
│ │ └── UpperCaseStringType.php
│ ├── EventListener/
│ │ └── CacheMetadataListener.php
│ ├── IterableTester.php
│ ├── Mocks/
│ │ ├── ArrayResultFactory.php
│ │ ├── AttributeDriverFactory.php
│ │ ├── CacheEntryMock.php
│ │ ├── CacheKeyMock.php
│ │ ├── CacheRegionMock.php
│ │ ├── CompatibilityType.php
│ │ ├── ConcurrentRegionMock.php
│ │ ├── CustomTreeWalkerJoin.php
│ │ ├── EntityManagerMock.php
│ │ ├── EntityPersisterMock.php
│ │ ├── ExceptionConverterMock.php
│ │ ├── MetadataDriverMock.php
│ │ ├── NullSqlWalker.php
│ │ ├── SchemaManagerMock.php
│ │ ├── TimestampRegionMock.php
│ │ └── UnitOfWorkMock.php
│ ├── Models/
│ │ ├── AbstractFetchEager/
│ │ │ ├── AbstractRemoteControl.php
│ │ │ ├── MobileRemoteControl.php
│ │ │ └── User.php
│ │ ├── BigIntegers/
│ │ │ └── BigIntegers.php
│ │ ├── BinaryPrimaryKey/
│ │ │ ├── BinaryId.php
│ │ │ ├── BinaryIdType.php
│ │ │ └── Category.php
│ │ ├── CMS/
│ │ │ ├── CmsAddress.php
│ │ │ ├── CmsAddressDTO.php
│ │ │ ├── CmsAddressDTONamedArgs.php
│ │ │ ├── CmsAddressListener.php
│ │ │ ├── CmsArticle.php
│ │ │ ├── CmsComment.php
│ │ │ ├── CmsDumbDTO.php
│ │ │ ├── CmsEmail.php
│ │ │ ├── CmsEmployee.php
│ │ │ ├── CmsGroup.php
│ │ │ ├── CmsPhonenumber.php
│ │ │ ├── CmsTag.php
│ │ │ ├── CmsUser.php
│ │ │ ├── CmsUserDTO.php
│ │ │ ├── CmsUserDTONamedArgs.php
│ │ │ └── CmsUserDTOVariadicArg.php
│ │ ├── Cache/
│ │ │ ├── Action.php
│ │ │ ├── Address.php
│ │ │ ├── Attraction.php
│ │ │ ├── AttractionContactInfo.php
│ │ │ ├── AttractionInfo.php
│ │ │ ├── AttractionLocationInfo.php
│ │ │ ├── Bar.php
│ │ │ ├── Beach.php
│ │ │ ├── City.php
│ │ │ ├── Client.php
│ │ │ ├── ComplexAction.php
│ │ │ ├── Country.php
│ │ │ ├── Flight.php
│ │ │ ├── Login.php
│ │ │ ├── Person.php
│ │ │ ├── Restaurant.php
│ │ │ ├── State.php
│ │ │ ├── Token.php
│ │ │ ├── Travel.php
│ │ │ ├── Traveler.php
│ │ │ ├── TravelerProfile.php
│ │ │ └── TravelerProfileInfo.php
│ │ ├── Company/
│ │ │ ├── CompanyAuction.php
│ │ │ ├── CompanyCar.php
│ │ │ ├── CompanyContract.php
│ │ │ ├── CompanyContractListener.php
│ │ │ ├── CompanyEmployee.php
│ │ │ ├── CompanyEvent.php
│ │ │ ├── CompanyFixContract.php
│ │ │ ├── CompanyFlexContract.php
│ │ │ ├── CompanyFlexUltraContract.php
│ │ │ ├── CompanyFlexUltraContractListener.php
│ │ │ ├── CompanyManager.php
│ │ │ ├── CompanyOrganization.php
│ │ │ ├── CompanyPerson.php
│ │ │ └── CompanyRaffle.php
│ │ ├── CompositeKeyInheritance/
│ │ │ ├── JoinedChildClass.php
│ │ │ ├── JoinedDerivedChildClass.php
│ │ │ ├── JoinedDerivedIdentityClass.php
│ │ │ ├── JoinedDerivedRootClass.php
│ │ │ ├── JoinedRootClass.php
│ │ │ ├── SingleChildClass.php
│ │ │ └── SingleRootClass.php
│ │ ├── CompositeKeyRelations/
│ │ │ ├── CustomerClass.php
│ │ │ └── InvoiceClass.php
│ │ ├── CustomType/
│ │ │ ├── CustomIdObjectTypeChild.php
│ │ │ ├── CustomIdObjectTypeParent.php
│ │ │ ├── CustomTypeChild.php
│ │ │ ├── CustomTypeParent.php
│ │ │ └── CustomTypeUpperCase.php
│ │ ├── Customer/
│ │ │ ├── CustomerType.php
│ │ │ ├── ExternalCustomer.php
│ │ │ └── InternalCustomer.php
│ │ ├── DDC117/
│ │ │ ├── DDC117ApproveChanges.php
│ │ │ ├── DDC117Article.php
│ │ │ ├── DDC117ArticleDetails.php
│ │ │ ├── DDC117Editor.php
│ │ │ ├── DDC117Link.php
│ │ │ ├── DDC117Reference.php
│ │ │ └── DDC117Translation.php
│ │ ├── DDC1476/
│ │ │ └── DDC1476EntityWithDefaultFieldType.php
│ │ ├── DDC1590/
│ │ │ ├── DDC1590Entity.php
│ │ │ └── DDC1590User.php
│ │ ├── DDC1872/
│ │ │ ├── DDC1872Bar.php
│ │ │ ├── DDC1872ExampleEntityWithOverride.php
│ │ │ ├── DDC1872ExampleEntityWithoutOverride.php
│ │ │ └── DDC1872ExampleTrait.php
│ │ ├── DDC2372/
│ │ │ ├── DDC2372Address.php
│ │ │ ├── DDC2372Admin.php
│ │ │ ├── DDC2372User.php
│ │ │ └── Traits/
│ │ │ └── DDC2372AddressAndAccessors.php
│ │ ├── DDC2504/
│ │ │ ├── DDC2504ChildClass.php
│ │ │ ├── DDC2504OtherClass.php
│ │ │ └── DDC2504RootClass.php
│ │ ├── DDC2825/
│ │ │ ├── ExplicitSchemaAndTable.php
│ │ │ └── SchemaAndTableInTableName.php
│ │ ├── DDC3231/
│ │ │ ├── DDC3231EntityRepository.php
│ │ │ ├── DDC3231User1.php
│ │ │ ├── DDC3231User1NoNamespace.php
│ │ │ ├── DDC3231User2.php
│ │ │ └── DDC3231User2NoNamespace.php
│ │ ├── DDC3293/
│ │ │ ├── DDC3293Address.php
│ │ │ ├── DDC3293User.php
│ │ │ └── DDC3293UserPrefixed.php
│ │ ├── DDC3346/
│ │ │ ├── DDC3346Article.php
│ │ │ └── DDC3346Author.php
│ │ ├── DDC3579/
│ │ │ ├── DDC3579Admin.php
│ │ │ ├── DDC3579Group.php
│ │ │ └── DDC3579User.php
│ │ ├── DDC3597/
│ │ │ ├── DDC3597Image.php
│ │ │ ├── DDC3597Media.php
│ │ │ ├── DDC3597Root.php
│ │ │ └── Embeddable/
│ │ │ └── DDC3597Dimension.php
│ │ ├── DDC3699/
│ │ │ ├── DDC3699Child.php
│ │ │ ├── DDC3699Parent.php
│ │ │ ├── DDC3699RelationMany.php
│ │ │ └── DDC3699RelationOne.php
│ │ ├── DDC3711/
│ │ │ ├── DDC3711EntityA.php
│ │ │ └── DDC3711EntityB.php
│ │ ├── DDC3899/
│ │ │ ├── DDC3899Contract.php
│ │ │ ├── DDC3899FixContract.php
│ │ │ ├── DDC3899FlexContract.php
│ │ │ └── DDC3899User.php
│ │ ├── DDC4006/
│ │ │ ├── DDC4006User.php
│ │ │ └── DDC4006UserId.php
│ │ ├── DDC5934/
│ │ │ ├── DDC5934BaseContract.php
│ │ │ ├── DDC5934Contract.php
│ │ │ └── DDC5934Member.php
│ │ ├── DDC6412/
│ │ │ └── DDC6412File.php
│ │ ├── DDC6573/
│ │ │ ├── DDC6573Currency.php
│ │ │ ├── DDC6573Item.php
│ │ │ └── DDC6573Money.php
│ │ ├── DDC753/
│ │ │ ├── DDC753CustomRepository.php
│ │ │ ├── DDC753DefaultRepository.php
│ │ │ ├── DDC753EntityWithCustomRepository.php
│ │ │ ├── DDC753EntityWithDefaultCustomRepository.php
│ │ │ ├── DDC753EntityWithInvalidRepository.php
│ │ │ └── DDC753InvalidRepository.php
│ │ ├── DDC869/
│ │ │ ├── DDC869ChequePayment.php
│ │ │ ├── DDC869CreditCardPayment.php
│ │ │ ├── DDC869Payment.php
│ │ │ └── DDC869PaymentRepository.php
│ │ ├── DDC889/
│ │ │ ├── DDC889Class.php
│ │ │ ├── DDC889Entity.php
│ │ │ └── DDC889SuperClass.php
│ │ ├── DDC964/
│ │ │ ├── DDC964Address.php
│ │ │ ├── DDC964Admin.php
│ │ │ ├── DDC964Group.php
│ │ │ ├── DDC964Guest.php
│ │ │ └── DDC964User.php
│ │ ├── DataTransferObjects/
│ │ │ ├── DtoWithArrayOfEnums.php
│ │ │ └── DtoWithEnum.php
│ │ ├── DirectoryTree/
│ │ │ ├── AbstractContentItem.php
│ │ │ ├── Directory.php
│ │ │ └── File.php
│ │ ├── ECommerce/
│ │ │ ├── ECommerceCart.php
│ │ │ ├── ECommerceCategory.php
│ │ │ ├── ECommerceCustomer.php
│ │ │ ├── ECommerceFeature.php
│ │ │ ├── ECommerceProduct.php
│ │ │ ├── ECommerceProduct2.php
│ │ │ └── ECommerceShipping.php
│ │ ├── EagerFetchedCompositeOneToMany/
│ │ │ ├── RootEntity.php
│ │ │ ├── SecondLevel.php
│ │ │ └── SecondLevelWithoutCompositePrimaryKey.php
│ │ ├── Enums/
│ │ │ ├── AccessLevel.php
│ │ │ ├── BookCategory.php
│ │ │ ├── BookGenre.php
│ │ │ ├── BookWithGenre.php
│ │ │ ├── Card.php
│ │ │ ├── CardNativeEnum.php
│ │ │ ├── CardWithDefault.php
│ │ │ ├── CardWithNullable.php
│ │ │ ├── City.php
│ │ │ ├── FaultySwitch.php
│ │ │ ├── Library.php
│ │ │ ├── Product.php
│ │ │ ├── Quantity.php
│ │ │ ├── Scale.php
│ │ │ ├── Suit.php
│ │ │ ├── SwitchStatus.php
│ │ │ ├── TypedCard.php
│ │ │ ├── TypedCardEnumCompositeId.php
│ │ │ ├── TypedCardEnumId.php
│ │ │ ├── TypedCardNativeEnum.php
│ │ │ ├── Unit.php
│ │ │ └── UserStatus.php
│ │ ├── Forum/
│ │ │ ├── ForumAvatar.php
│ │ │ ├── ForumBoard.php
│ │ │ ├── ForumCategory.php
│ │ │ ├── ForumEntry.php
│ │ │ └── ForumUser.php
│ │ ├── GH10132/
│ │ │ ├── Complex.php
│ │ │ └── ComplexChild.php
│ │ ├── GH10288/
│ │ │ └── GH10288People.php
│ │ ├── GH10334/
│ │ │ ├── GH10334Foo.php
│ │ │ ├── GH10334FooCollection.php
│ │ │ ├── GH10334Product.php
│ │ │ ├── GH10334ProductType.php
│ │ │ └── GH10334ProductTypeId.php
│ │ ├── GH10336/
│ │ │ ├── GH10336Entity.php
│ │ │ └── GH10336Relation.php
│ │ ├── GH11524/
│ │ │ ├── GH11524Entity.php
│ │ │ ├── GH11524Listener.php
│ │ │ └── GH11524Relation.php
│ │ ├── GH7141/
│ │ │ └── GH7141Article.php
│ │ ├── GH7316/
│ │ │ └── GH7316Article.php
│ │ ├── GH7717/
│ │ │ ├── GH7717Child.php
│ │ │ └── GH7717Parent.php
│ │ ├── GH8565/
│ │ │ ├── GH8565Employee.php
│ │ │ ├── GH8565Manager.php
│ │ │ └── GH8565Person.php
│ │ ├── Generic/
│ │ │ ├── BooleanModel.php
│ │ │ ├── DateTimeModel.php
│ │ │ ├── DecimalModel.php
│ │ │ ├── NonAlphaColumnsEntity.php
│ │ │ └── SerializationModel.php
│ │ ├── GeoNames/
│ │ │ ├── Admin1.php
│ │ │ ├── Admin1AlternateName.php
│ │ │ ├── City.php
│ │ │ └── Country.php
│ │ ├── Global/
│ │ │ └── GlobalNamespaceModel.php
│ │ ├── Hydration/
│ │ │ ├── EntityWithArrayDefaultArrayValueM2M.php
│ │ │ └── SimpleEntity.php
│ │ ├── InvalidXml.php
│ │ ├── Issue5989/
│ │ │ ├── Issue5989Employee.php
│ │ │ ├── Issue5989Manager.php
│ │ │ └── Issue5989Person.php
│ │ ├── Issue9300/
│ │ │ ├── Issue9300Child.php
│ │ │ └── Issue9300Parent.php
│ │ ├── JoinedInheritanceType/
│ │ │ ├── AnotherChildClass.php
│ │ │ ├── ChildClass.php
│ │ │ └── RootClass.php
│ │ ├── Legacy/
│ │ │ ├── LegacyArticle.php
│ │ │ ├── LegacyCar.php
│ │ │ ├── LegacyUser.php
│ │ │ └── LegacyUserReference.php
│ │ ├── ManyToManyPersister/
│ │ │ ├── ChildClass.php
│ │ │ ├── OtherParentClass.php
│ │ │ └── ParentClass.php
│ │ ├── MixedToOneIdentity/
│ │ │ ├── CompositeToOneKeyState.php
│ │ │ └── Country.php
│ │ ├── Navigation/
│ │ │ ├── NavCountry.php
│ │ │ ├── NavPhotos.php
│ │ │ ├── NavPointOfInterest.php
│ │ │ ├── NavTour.php
│ │ │ └── NavUser.php
│ │ ├── NonPublicSchemaJoins/
│ │ │ └── User.php
│ │ ├── NullDefault/
│ │ │ └── NullDefaultColumn.php
│ │ ├── OneToOneInverseSideLoad/
│ │ │ ├── InverseSide.php
│ │ │ └── OwningSide.php
│ │ ├── OneToOneInverseSideWithAssociativeIdLoad/
│ │ │ ├── InverseSide.php
│ │ │ ├── InverseSideIdTarget.php
│ │ │ └── OwningSide.php
│ │ ├── OneToOneSingleTableInheritance/
│ │ │ ├── Cat.php
│ │ │ ├── LitterBox.php
│ │ │ └── Pet.php
│ │ ├── Pagination/
│ │ │ ├── Company.php
│ │ │ ├── Department.php
│ │ │ ├── Logo.php
│ │ │ ├── User.php
│ │ │ └── User1.php
│ │ ├── PersistentObject/
│ │ │ ├── PersistentCollectionContent.php
│ │ │ ├── PersistentCollectionHolder.php
│ │ │ └── PersistentEntity.php
│ │ ├── Project/
│ │ │ ├── Project.php
│ │ │ ├── ProjectId.php
│ │ │ ├── ProjectInvalidMapping.php
│ │ │ └── ProjectName.php
│ │ ├── PropertyHooks/
│ │ │ ├── MappingVirtualProperty.php
│ │ │ └── User.php
│ │ ├── Quote/
│ │ │ ├── Address.php
│ │ │ ├── City.php
│ │ │ ├── FullAddress.php
│ │ │ ├── Group.php
│ │ │ ├── NumericEntity.php
│ │ │ ├── Phone.php
│ │ │ └── User.php
│ │ ├── ReadonlyProperties/
│ │ │ ├── Author.php
│ │ │ ├── Book.php
│ │ │ └── SimpleBook.php
│ │ ├── Reflection/
│ │ │ ├── AbstractEmbeddable.php
│ │ │ ├── ArrayObjectExtendingClass.php
│ │ │ ├── ClassWithMixedProperties.php
│ │ │ ├── ConcreteEmbeddable.php
│ │ │ └── ParentClass.php
│ │ ├── Routing/
│ │ │ ├── RoutingLeg.php
│ │ │ ├── RoutingLocation.php
│ │ │ ├── RoutingRoute.php
│ │ │ └── RoutingRouteBooking.php
│ │ ├── StockExchange/
│ │ │ ├── Bond.php
│ │ │ ├── Market.php
│ │ │ └── Stock.php
│ │ ├── Taxi/
│ │ │ ├── Car.php
│ │ │ ├── Driver.php
│ │ │ ├── PaidRide.php
│ │ │ └── Ride.php
│ │ ├── Tweet/
│ │ │ ├── Tweet.php
│ │ │ ├── User.php
│ │ │ └── UserList.php
│ │ ├── TypedProperties/
│ │ │ ├── Contact.php
│ │ │ ├── UserTyped.php
│ │ │ └── UserTypedWithCustomTypedField.php
│ │ ├── Upsertable/
│ │ │ ├── Insertable.php
│ │ │ └── Updatable.php
│ │ ├── ValueConversionType/
│ │ │ ├── AuxiliaryEntity.php
│ │ │ ├── InversedManyToManyCompositeIdEntity.php
│ │ │ ├── InversedManyToManyCompositeIdForeignKeyEntity.php
│ │ │ ├── InversedManyToManyEntity.php
│ │ │ ├── InversedManyToManyExtraLazyEntity.php
│ │ │ ├── InversedOneToManyCompositeIdEntity.php
│ │ │ ├── InversedOneToManyCompositeIdForeignKeyEntity.php
│ │ │ ├── InversedOneToManyEntity.php
│ │ │ ├── InversedOneToManyExtraLazyEntity.php
│ │ │ ├── InversedOneToOneCompositeIdEntity.php
│ │ │ ├── InversedOneToOneCompositeIdForeignKeyEntity.php
│ │ │ ├── InversedOneToOneEntity.php
│ │ │ ├── OwningManyToManyCompositeIdEntity.php
│ │ │ ├── OwningManyToManyCompositeIdForeignKeyEntity.php
│ │ │ ├── OwningManyToManyEntity.php
│ │ │ ├── OwningManyToManyExtraLazyEntity.php
│ │ │ ├── OwningManyToOneCompositeIdEntity.php
│ │ │ ├── OwningManyToOneCompositeIdForeignKeyEntity.php
│ │ │ ├── OwningManyToOneEntity.php
│ │ │ ├── OwningManyToOneExtraLazyEntity.php
│ │ │ ├── OwningManyToOneIdForeignKeyEntity.php
│ │ │ ├── OwningOneToOneCompositeIdEntity.php
│ │ │ ├── OwningOneToOneCompositeIdForeignKeyEntity.php
│ │ │ └── OwningOneToOneEntity.php
│ │ ├── ValueObjects/
│ │ │ ├── Name.php
│ │ │ └── Person.php
│ │ ├── VersionedManyToOne/
│ │ │ ├── Article.php
│ │ │ └── Category.php
│ │ └── VersionedOneToOne/
│ │ ├── FirstRelatedEntity.php
│ │ └── SecondRelatedEntity.php
│ ├── ORM/
│ │ ├── AbstractQueryTest.php
│ │ ├── Cache/
│ │ │ ├── CacheConfigTest.php
│ │ │ ├── CacheKeyTest.php
│ │ │ ├── CacheLoggerChainTest.php
│ │ │ ├── DefaultCacheFactoryTest.php
│ │ │ ├── DefaultCacheTest.php
│ │ │ ├── DefaultCollectionHydratorTest.php
│ │ │ ├── DefaultEntityHydratorTest.php
│ │ │ ├── DefaultQueryCacheTest.php
│ │ │ ├── DefaultRegionTest.php
│ │ │ ├── FileLockRegionTest.php
│ │ │ ├── Persister/
│ │ │ │ ├── Collection/
│ │ │ │ │ ├── CollectionPersisterTestCase.php
│ │ │ │ │ ├── NonStrictReadWriteCachedCollectionPersisterTest.php
│ │ │ │ │ ├── ReadOnlyCachedCollectionPersisterTest.php
│ │ │ │ │ └── ReadWriteCachedCollectionPersisterTest.php
│ │ │ │ └── Entity/
│ │ │ │ ├── EntityPersisterTestCase.php
│ │ │ │ ├── NonStrictReadWriteCachedEntityPersisterTest.php
│ │ │ │ ├── ReadOnlyCachedEntityPersisterTest.php
│ │ │ │ └── ReadWriteCachedEntityPersisterTest.php
│ │ │ ├── RegionTestCase.php
│ │ │ └── StatisticsCacheLoggerTest.php
│ │ ├── ConfigurationTest.php
│ │ ├── Entity/
│ │ │ └── ConstructorTest.php
│ │ ├── EntityManagerTest.php
│ │ ├── EntityNotFoundExceptionTest.php
│ │ ├── Event/
│ │ │ └── OnClassMetadataNotFoundEventArgsTest.php
│ │ ├── Functional/
│ │ │ ├── AbstractFetchEagerTest.php
│ │ │ ├── AbstractManyToManyAssociationTestCase.php
│ │ │ ├── AdvancedAssociationTest.php
│ │ │ ├── AdvancedDqlQueryTest.php
│ │ │ ├── BasicFunctionalTest.php
│ │ │ ├── CascadeRemoveOrderTest.php
│ │ │ ├── ClassTableInheritanceSecondTest.php
│ │ │ ├── ClassTableInheritanceTest.php
│ │ │ ├── ClearEventTest.php
│ │ │ ├── CompositeKeyRelationsTest.php
│ │ │ ├── CompositePrimaryKeyTest.php
│ │ │ ├── CompositePrimaryKeyWithAssociationsTest.php
│ │ │ ├── CustomFunctionsTest.php
│ │ │ ├── CustomIdObjectTypeTest.php
│ │ │ ├── DatabaseDriverTest.php
│ │ │ ├── DatabaseDriverTestCase.php
│ │ │ ├── DefaultTimeExpressionTest.php
│ │ │ ├── DefaultTimeExpressionXmlTest.php
│ │ │ ├── DefaultValuesTest.php
│ │ │ ├── DetachedEntityTest.php
│ │ │ ├── EagerFetchCollectionTest.php
│ │ │ ├── EagerFetchOneToManyWithCompositeKeyTest.php
│ │ │ ├── EntityListenersTest.php
│ │ │ ├── EntityRepositoryCriteriaTest.php
│ │ │ ├── EntityRepositoryTest.php
│ │ │ ├── EnumTest.php
│ │ │ ├── ExtraLazyCollectionTest.php
│ │ │ ├── FlushEventTest.php
│ │ │ ├── GH7877Test.php
│ │ │ ├── HydrationCacheTest.php
│ │ │ ├── IdentityMapTest.php
│ │ │ ├── IndexByAssociationTest.php
│ │ │ ├── InsertableUpdatableTest.php
│ │ │ ├── InvalidMappingDefinitionTest.php
│ │ │ ├── JoinedTableCompositeKeyTest.php
│ │ │ ├── LifecycleCallbackTest.php
│ │ │ ├── Locking/
│ │ │ │ ├── GearmanLockTest.php
│ │ │ │ ├── LockAgentWorker.php
│ │ │ │ ├── LockTest.php
│ │ │ │ └── OptimisticTest.php
│ │ │ ├── ManyToManyBasicAssociationTest.php
│ │ │ ├── ManyToManyBidirectionalAssociationTest.php
│ │ │ ├── ManyToManyEventTest.php
│ │ │ ├── ManyToManySelfReferentialAssociationTest.php
│ │ │ ├── ManyToManyUnidirectionalAssociationTest.php
│ │ │ ├── MappedSuperclassTest.php
│ │ │ ├── NativeQueryTest.php
│ │ │ ├── NewOperatorTest.php
│ │ │ ├── OneToManyBidirectionalAssociationTest.php
│ │ │ ├── OneToManyOrphanRemovalTest.php
│ │ │ ├── OneToManySelfReferentialAssociationTest.php
│ │ │ ├── OneToManyUnidirectionalAssociationTest.php
│ │ │ ├── OneToOneBidirectionalAssociationTest.php
│ │ │ ├── OneToOneEagerLoadingTest.php
│ │ │ ├── OneToOneInverseSideLoadAfterDqlQueryTest.php
│ │ │ ├── OneToOneInverseSideWithAssociativeIdLoadAfterDqlQueryTest.php
│ │ │ ├── OneToOneOrphanRemovalTest.php
│ │ │ ├── OneToOneSelfReferentialAssociationTest.php
│ │ │ ├── OneToOneSingleTableInheritanceTest.php
│ │ │ ├── OneToOneUnidirectionalAssociationTest.php
│ │ │ ├── OrderedCollectionTest.php
│ │ │ ├── OrderedJoinedTableInheritanceCollectionTest.php
│ │ │ ├── PaginationTest.php
│ │ │ ├── ParserResultSerializationTest.php
│ │ │ ├── ParserResults/
│ │ │ │ └── single_select_2_17_0.txt
│ │ │ ├── PersistentCollectionCriteriaTest.php
│ │ │ ├── PersistentCollectionTest.php
│ │ │ ├── PostFlushEventTest.php
│ │ │ ├── PostLoadEventTest.php
│ │ │ ├── PrePersistEventTest.php
│ │ │ ├── PropertyHooksTest.php
│ │ │ ├── ProxiesLikeEntitiesTest.php
│ │ │ ├── QueryBuilderParenthesisTest.php
│ │ │ ├── QueryCacheTest.php
│ │ │ ├── QueryDqlFunctionTest.php
│ │ │ ├── QueryIterableTest.php
│ │ │ ├── QueryParameterTest.php
│ │ │ ├── QueryTest.php
│ │ │ ├── ReadOnlyTest.php
│ │ │ ├── ReadonlyPropertiesTest.php
│ │ │ ├── ReferenceProxyTest.php
│ │ │ ├── ResultCacheTest.php
│ │ │ ├── SQLFilterTest.php
│ │ │ ├── SchemaTool/
│ │ │ │ ├── CompanySchemaTest.php
│ │ │ │ ├── DBAL483Test.php
│ │ │ │ ├── DDC214Test.php
│ │ │ │ ├── MySqlSchemaToolTest.php
│ │ │ │ └── PostgreSqlSchemaToolTest.php
│ │ │ ├── SchemaValidatorTest.php
│ │ │ ├── SecondLevelCacheCompositePrimaryKeyTest.php
│ │ │ ├── SecondLevelCacheCompositePrimaryKeyWithAssociationsTest.php
│ │ │ ├── SecondLevelCacheConcurrentTest.php
│ │ │ ├── SecondLevelCacheCountQueriesTest.php
│ │ │ ├── SecondLevelCacheCriteriaTest.php
│ │ │ ├── SecondLevelCacheExtraLazyCollectionTest.php
│ │ │ ├── SecondLevelCacheFunctionalTestCase.php
│ │ │ ├── SecondLevelCacheJoinTableInheritanceTest.php
│ │ │ ├── SecondLevelCacheManyToManyTest.php
│ │ │ ├── SecondLevelCacheManyToOneTest.php
│ │ │ ├── SecondLevelCacheOneToManyTest.php
│ │ │ ├── SecondLevelCacheOneToOneTest.php
│ │ │ ├── SecondLevelCacheQueryCacheTest.php
│ │ │ ├── SecondLevelCacheRepositoryTest.php
│ │ │ ├── SecondLevelCacheSingleTableInheritanceTest.php
│ │ │ ├── SecondLevelCacheTest.php
│ │ │ ├── SequenceGeneratorTest.php
│ │ │ ├── SingleTableCompositeKeyTest.php
│ │ │ ├── SingleTableInheritanceTest.php
│ │ │ ├── StandardEntityPersisterTest.php
│ │ │ ├── Ticket/
│ │ │ │ ├── DDC1040Test.php
│ │ │ │ ├── DDC1041Test.php
│ │ │ │ ├── DDC1043Test.php
│ │ │ │ ├── DDC1080Test.php
│ │ │ │ ├── DDC1113Test.php
│ │ │ │ ├── DDC1129Test.php
│ │ │ │ ├── DDC1163Test.php
│ │ │ │ ├── DDC117Test.php
│ │ │ │ ├── DDC1181Test.php
│ │ │ │ ├── DDC1193Test.php
│ │ │ │ ├── DDC1209Test.php
│ │ │ │ ├── DDC1225Test.php
│ │ │ │ ├── DDC1228Test.php
│ │ │ │ ├── DDC1238Test.php
│ │ │ │ ├── DDC1250Test.php
│ │ │ │ ├── DDC1300Test.php
│ │ │ │ ├── DDC1301Test.php
│ │ │ │ ├── DDC1306Test.php
│ │ │ │ ├── DDC1335Test.php
│ │ │ │ ├── DDC1400Test.php
│ │ │ │ ├── DDC142Test.php
│ │ │ │ ├── DDC1430Test.php
│ │ │ │ ├── DDC1436Test.php
│ │ │ │ ├── DDC144Test.php
│ │ │ │ ├── DDC1452Test.php
│ │ │ │ ├── DDC1454Test.php
│ │ │ │ ├── DDC1458Test.php
│ │ │ │ ├── DDC1461Test.php
│ │ │ │ ├── DDC1514Test.php
│ │ │ │ ├── DDC1515Test.php
│ │ │ │ ├── DDC1526Test.php
│ │ │ │ ├── DDC1545Test.php
│ │ │ │ ├── DDC1548Test.php
│ │ │ │ ├── DDC1595Test.php
│ │ │ │ ├── DDC163Test.php
│ │ │ │ ├── DDC1643Test.php
│ │ │ │ ├── DDC1654Test.php
│ │ │ │ ├── DDC1655Test.php
│ │ │ │ ├── DDC1666Test.php
│ │ │ │ ├── DDC1685Test.php
│ │ │ │ ├── DDC168Test.php
│ │ │ │ ├── DDC1695Test.php
│ │ │ │ ├── DDC1707Test.php
│ │ │ │ ├── DDC1719Test.php
│ │ │ │ ├── DDC1757Test.php
│ │ │ │ ├── DDC1778Test.php
│ │ │ │ ├── DDC1787Test.php
│ │ │ │ ├── DDC1843Test.php
│ │ │ │ ├── DDC1884Test.php
│ │ │ │ ├── DDC1885Test.php
│ │ │ │ ├── DDC1918Test.php
│ │ │ │ ├── DDC1925Test.php
│ │ │ │ ├── DDC192Test.php
│ │ │ │ ├── DDC1995Test.php
│ │ │ │ ├── DDC1998Test.php
│ │ │ │ ├── DDC199Test.php
│ │ │ │ ├── DDC2012Test.php
│ │ │ │ ├── DDC2074Test.php
│ │ │ │ ├── DDC2084Test.php
│ │ │ │ ├── DDC2090Test.php
│ │ │ │ ├── DDC2106Test.php
│ │ │ │ ├── DDC211Test.php
│ │ │ │ ├── DDC2138Test.php
│ │ │ │ ├── DDC2175Test.php
│ │ │ │ ├── DDC2182Test.php
│ │ │ │ ├── DDC2214Test.php
│ │ │ │ ├── DDC2224Test.php
│ │ │ │ ├── DDC2252Test.php
│ │ │ │ ├── DDC2306Test.php
│ │ │ │ ├── DDC2346Test.php
│ │ │ │ ├── DDC2350Test.php
│ │ │ │ ├── DDC2359Test.php
│ │ │ │ ├── DDC237Test.php
│ │ │ │ ├── DDC2387Test.php
│ │ │ │ ├── DDC2415Test.php
│ │ │ │ ├── DDC2494Test.php
│ │ │ │ ├── DDC2519Test.php
│ │ │ │ ├── DDC2575Test.php
│ │ │ │ ├── DDC2579Test.php
│ │ │ │ ├── DDC258Test.php
│ │ │ │ ├── DDC2602Test.php
│ │ │ │ ├── DDC2655Test.php
│ │ │ │ ├── DDC2660Test.php
│ │ │ │ ├── DDC2692Test.php
│ │ │ │ ├── DDC2759Test.php
│ │ │ │ ├── DDC2775Test.php
│ │ │ │ ├── DDC2780Test.php
│ │ │ │ ├── DDC2790Test.php
│ │ │ │ ├── DDC279Test.php
│ │ │ │ ├── DDC2825Test.php
│ │ │ │ ├── DDC2862Test.php
│ │ │ │ ├── DDC2895Test.php
│ │ │ │ ├── DDC2931Test.php
│ │ │ │ ├── DDC2943Test.php
│ │ │ │ ├── DDC2984Test.php
│ │ │ │ ├── DDC2996Test.php
│ │ │ │ ├── DDC3033Test.php
│ │ │ │ ├── DDC3042Test.php
│ │ │ │ ├── DDC3068Test.php
│ │ │ │ ├── DDC309Test.php
│ │ │ │ ├── DDC3103Test.php
│ │ │ │ ├── DDC3123Test.php
│ │ │ │ ├── DDC3160Test.php
│ │ │ │ ├── DDC3170Test.php
│ │ │ │ ├── DDC3192Test.php
│ │ │ │ ├── DDC3223Test.php
│ │ │ │ ├── DDC3300Test.php
│ │ │ │ ├── DDC3303Test.php
│ │ │ │ ├── DDC331Test.php
│ │ │ │ ├── DDC3330Test.php
│ │ │ │ ├── DDC3346Test.php
│ │ │ │ ├── DDC345Test.php
│ │ │ │ ├── DDC353Test.php
│ │ │ │ ├── DDC3582Test.php
│ │ │ │ ├── DDC3597Test.php
│ │ │ │ ├── DDC3634Test.php
│ │ │ │ ├── DDC3644Test.php
│ │ │ │ ├── DDC3719Test.php
│ │ │ │ ├── DDC371Test.php
│ │ │ │ ├── DDC3785Test.php
│ │ │ │ ├── DDC381Test.php
│ │ │ │ ├── DDC3967Test.php
│ │ │ │ ├── DDC4003Test.php
│ │ │ │ ├── DDC4024Test.php
│ │ │ │ ├── DDC422Test.php
│ │ │ │ ├── DDC425Test.php
│ │ │ │ ├── DDC440Test.php
│ │ │ │ ├── DDC444Test.php
│ │ │ │ ├── DDC448Test.php
│ │ │ │ ├── DDC493Test.php
│ │ │ │ ├── DDC512Test.php
│ │ │ │ ├── DDC513Test.php
│ │ │ │ ├── DDC522Test.php
│ │ │ │ ├── DDC531Test.php
│ │ │ │ ├── DDC5684Test.php
│ │ │ │ ├── DDC588Test.php
│ │ │ │ ├── DDC599Test.php
│ │ │ │ ├── DDC618Test.php
│ │ │ │ ├── DDC6303Test.php
│ │ │ │ ├── DDC633Test.php
│ │ │ │ ├── DDC6460Test.php
│ │ │ │ ├── DDC6558Test.php
│ │ │ │ ├── DDC656Test.php
│ │ │ │ ├── DDC6573Test.php
│ │ │ │ ├── DDC657Test.php
│ │ │ │ ├── DDC698Test.php
│ │ │ │ ├── DDC69Test.php
│ │ │ │ ├── DDC719Test.php
│ │ │ │ ├── DDC735Test.php
│ │ │ │ ├── DDC736Test.php
│ │ │ │ ├── DDC748Test.php
│ │ │ │ ├── DDC767Test.php
│ │ │ │ ├── DDC7969Test.php
│ │ │ │ ├── DDC809Test.php
│ │ │ │ ├── DDC812Test.php
│ │ │ │ ├── DDC832Test.php
│ │ │ │ ├── DDC837Test.php
│ │ │ │ ├── DDC849Test.php
│ │ │ │ ├── DDC881Test.php
│ │ │ │ ├── DDC933Test.php
│ │ │ │ ├── DDC949Test.php
│ │ │ │ ├── DDC960Test.php
│ │ │ │ ├── DDC992Test.php
│ │ │ │ ├── GH10049/
│ │ │ │ │ ├── GH10049Test.php
│ │ │ │ │ ├── ReadOnlyPropertyInheritor.php
│ │ │ │ │ └── ReadOnlyPropertyOwner.php
│ │ │ │ ├── GH10132Test.php
│ │ │ │ ├── GH10288Test.php
│ │ │ │ ├── GH10334Test.php
│ │ │ │ ├── GH10336Test.php
│ │ │ │ ├── GH10348Test.php
│ │ │ │ ├── GH10387Test.php
│ │ │ │ ├── GH10450Test.php
│ │ │ │ ├── GH10454Test.php
│ │ │ │ ├── GH10462Test.php
│ │ │ │ ├── GH10473Test.php
│ │ │ │ ├── GH10531Test.php
│ │ │ │ ├── GH10532Test.php
│ │ │ │ ├── GH10566Test.php
│ │ │ │ ├── GH10625Test.php
│ │ │ │ ├── GH10661/
│ │ │ │ │ ├── GH10661Test.php
│ │ │ │ │ ├── InvalidChildEntity.php
│ │ │ │ │ └── InvalidEntity.php
│ │ │ │ ├── GH10747Test.php
│ │ │ │ ├── GH10752Test.php
│ │ │ │ ├── GH10808Test.php
│ │ │ │ ├── GH10869Test.php
│ │ │ │ ├── GH10880Test.php
│ │ │ │ ├── GH10889Test.php
│ │ │ │ ├── GH10912Test.php
│ │ │ │ ├── GH10913Test.php
│ │ │ │ ├── GH10927Test.php
│ │ │ │ ├── GH11017/
│ │ │ │ │ ├── GH11017Entity.php
│ │ │ │ │ ├── GH11017Enum.php
│ │ │ │ │ └── GH11017Test.php
│ │ │ │ ├── GH11037/
│ │ │ │ │ ├── EntityStatus.php
│ │ │ │ │ ├── GH11037Test.php
│ │ │ │ │ ├── IntEntityStatus.php
│ │ │ │ │ ├── InvalidEntityWithTypedEnum.php
│ │ │ │ │ ├── StringEntityStatus.php
│ │ │ │ │ └── ValidEntityWithTypedEnum.php
│ │ │ │ ├── GH11058Test.php
│ │ │ │ ├── GH11072/
│ │ │ │ │ ├── GH11072EntityAdvanced.php
│ │ │ │ │ ├── GH11072EntityBasic.php
│ │ │ │ │ └── GH11072Test.php
│ │ │ │ ├── GH11112Test.php
│ │ │ │ ├── GH11135Test.php
│ │ │ │ ├── GH11149/
│ │ │ │ │ ├── EagerProduct.php
│ │ │ │ │ ├── EagerProductTranslation.php
│ │ │ │ │ ├── GH11149Test.php
│ │ │ │ │ └── Locale.php
│ │ │ │ ├── GH11163Test.php
│ │ │ │ ├── GH11199Test.php
│ │ │ │ ├── GH11341Test.php
│ │ │ │ ├── GH11386/
│ │ │ │ │ ├── GH11386EntityCart.php
│ │ │ │ │ ├── GH11386EntityCustomer.php
│ │ │ │ │ ├── GH11386EnumType.php
│ │ │ │ │ └── GH11386Test.php
│ │ │ │ ├── GH11487Test.php
│ │ │ │ ├── GH11500Test.php
│ │ │ │ ├── GH11501Test.php
│ │ │ │ ├── GH11524Test.php
│ │ │ │ ├── GH11982Test.php
│ │ │ │ ├── GH12166/
│ │ │ │ │ ├── GH12166Test.php
│ │ │ │ │ └── LazyEntityWithReadonlyId.php
│ │ │ │ ├── GH12174Test.php
│ │ │ │ ├── GH12183Test.php
│ │ │ │ ├── GH12254Test.php
│ │ │ │ ├── GH2947Test.php
│ │ │ │ ├── GH5562Test.php
│ │ │ │ ├── GH5742Test.php
│ │ │ │ ├── GH5762Test.php
│ │ │ │ ├── GH5804Test.php
│ │ │ │ ├── GH5887Test.php
│ │ │ │ ├── GH5988Test.php
│ │ │ │ ├── GH5998Test.php
│ │ │ │ ├── GH6029Test.php
│ │ │ │ ├── GH6123Test.php
│ │ │ │ ├── GH6141Test.php
│ │ │ │ ├── GH6217Test.php
│ │ │ │ ├── GH6362Test.php
│ │ │ │ ├── GH6394Test.php
│ │ │ │ ├── GH6402Test.php
│ │ │ │ ├── GH6464Test.php
│ │ │ │ ├── GH6499OneToManyRelationshipTest.php
│ │ │ │ ├── GH6499OneToOneRelationshipTest.php
│ │ │ │ ├── GH6499Test.php
│ │ │ │ ├── GH6531Test.php
│ │ │ │ ├── GH6682Test.php
│ │ │ │ ├── GH6699Test.php
│ │ │ │ ├── GH6740Test.php
│ │ │ │ ├── GH6823Test.php
│ │ │ │ ├── GH6937Test.php
│ │ │ │ ├── GH7006Test.php
│ │ │ │ ├── GH7012Test.php
│ │ │ │ ├── GH7062Test.php
│ │ │ │ ├── GH7067Test.php
│ │ │ │ ├── GH7068Test.php
│ │ │ │ ├── GH7079Test.php
│ │ │ │ ├── GH7180Test.php
│ │ │ │ ├── GH7259Test.php
│ │ │ │ ├── GH7286Test.php
│ │ │ │ ├── GH7366Test.php
│ │ │ │ ├── GH7496WithToIterableTest.php
│ │ │ │ ├── GH7505Test.php
│ │ │ │ ├── GH7512Test.php
│ │ │ │ ├── GH7629Test.php
│ │ │ │ ├── GH7661Test.php
│ │ │ │ ├── GH7684Test.php
│ │ │ │ ├── GH7717Test.php
│ │ │ │ ├── GH7735Test.php
│ │ │ │ ├── GH7737Test.php
│ │ │ │ ├── GH7761Test.php
│ │ │ │ ├── GH7767Test.php
│ │ │ │ ├── GH7820Test.php
│ │ │ │ ├── GH7829Test.php
│ │ │ │ ├── GH7836Test.php
│ │ │ │ ├── GH7864Test.php
│ │ │ │ ├── GH7869Test.php
│ │ │ │ ├── GH7875Test.php
│ │ │ │ ├── GH7941Test.php
│ │ │ │ ├── GH8055Test.php
│ │ │ │ ├── GH8061Test.php
│ │ │ │ ├── GH8127Test.php
│ │ │ │ ├── GH8217Test.php
│ │ │ │ ├── GH8415Test.php
│ │ │ │ ├── GH8415ToManyAssociationTest.php
│ │ │ │ ├── GH8443Test.php
│ │ │ │ ├── GH8499Test.php
│ │ │ │ ├── GH8663Test.php
│ │ │ │ ├── GH8914Test.php
│ │ │ │ ├── GH9027Test.php
│ │ │ │ ├── GH9109Test.php
│ │ │ │ ├── GH9192Test.php
│ │ │ │ ├── GH9230Test.php
│ │ │ │ ├── GH9335Test.php
│ │ │ │ ├── GH9467/
│ │ │ │ │ ├── GH9467Test.php
│ │ │ │ │ ├── JoinedInheritanceChild.php
│ │ │ │ │ ├── JoinedInheritanceNonInsertableColumn.php
│ │ │ │ │ ├── JoinedInheritanceNonUpdatableColumn.php
│ │ │ │ │ ├── JoinedInheritanceNonWritableColumn.php
│ │ │ │ │ ├── JoinedInheritanceRoot.php
│ │ │ │ │ └── JoinedInheritanceWritableColumn.php
│ │ │ │ ├── GH9516Test.php
│ │ │ │ ├── GH9579Test.php
│ │ │ │ ├── GH9807Test.php
│ │ │ │ ├── Issue5989Test.php
│ │ │ │ ├── Issue9300Test.php
│ │ │ │ ├── SwitchContextWithFilter/
│ │ │ │ │ ├── AbstractTestCase.php
│ │ │ │ │ ├── ChangeFiltersTest.php
│ │ │ │ │ ├── Entity/
│ │ │ │ │ │ ├── Insurance.php
│ │ │ │ │ │ ├── Order.php
│ │ │ │ │ │ ├── Patient.php
│ │ │ │ │ │ ├── PatientInsurance.php
│ │ │ │ │ │ ├── Practice.php
│ │ │ │ │ │ ├── PrimaryPatInsurance.php
│ │ │ │ │ │ ├── SecondaryPatInsurance.php
│ │ │ │ │ │ └── User.php
│ │ │ │ │ ├── SQLFilter/
│ │ │ │ │ │ ├── CompanySQLFilter.php
│ │ │ │ │ │ └── PracticeContextSQLFilter.php
│ │ │ │ │ └── SwitchContextTest.php
│ │ │ │ ├── SwitchContextWithFilterAndIndexedRelation/
│ │ │ │ │ ├── Category.php
│ │ │ │ │ ├── CategoryTypeSQLFilter.php
│ │ │ │ │ ├── ChangeFiltersTest.php
│ │ │ │ │ └── Company.php
│ │ │ │ ├── Ticket2481Test.php
│ │ │ │ ├── Ticket4646InstanceOfAbstractTest.php
│ │ │ │ ├── Ticket4646InstanceOfMultiLevelTest.php
│ │ │ │ ├── Ticket4646InstanceOfParametricTest.php
│ │ │ │ ├── Ticket4646InstanceOfTest.php
│ │ │ │ └── Ticket4646InstanceOfWithMultipleParametersTest.php
│ │ │ ├── TypeTest.php
│ │ │ ├── TypeValueSqlTest.php
│ │ │ ├── UnitOfWorkLifecycleTest.php
│ │ │ ├── ValueConversionType/
│ │ │ │ ├── ManyToManyCompositeIdForeignKeyTest.php
│ │ │ │ ├── ManyToManyCompositeIdTest.php
│ │ │ │ ├── ManyToManyCriteriaMatchingTest.php
│ │ │ │ ├── ManyToManyExtraLazyTest.php
│ │ │ │ ├── ManyToManyTest.php
│ │ │ │ ├── OneToManyCompositeIdForeignKeyTest.php
│ │ │ │ ├── OneToManyCompositeIdTest.php
│ │ │ │ ├── OneToManyCriteriaMatchingTest.php
│ │ │ │ ├── OneToManyExtraLazyTest.php
│ │ │ │ ├── OneToManyTest.php
│ │ │ │ ├── OneToOneCompositeIdForeignKeyTest.php
│ │ │ │ ├── OneToOneCompositeIdTest.php
│ │ │ │ └── OneToOneTest.php
│ │ │ ├── ValueObjectsTest.php
│ │ │ └── VersionedOneToOneTest.php
│ │ ├── Hydration/
│ │ │ ├── AbstractHydratorTest.php
│ │ │ ├── ArrayHydratorTest.php
│ │ │ ├── CustomHydratorTest.php
│ │ │ ├── HydrationTestCase.php
│ │ │ ├── ObjectHydratorTest.php
│ │ │ ├── ResultSetMappingTest.php
│ │ │ ├── ScalarColumnHydratorTest.php
│ │ │ ├── ScalarHydratorTest.php
│ │ │ ├── SimpleObjectHydratorTest.php
│ │ │ └── SingleScalarHydratorTest.php
│ │ ├── Id/
│ │ │ ├── AssignedGeneratorTest.php
│ │ │ └── SequenceGeneratorTest.php
│ │ ├── Internal/
│ │ │ ├── HydrationCompleteHandlerTest.php
│ │ │ ├── Node.php
│ │ │ ├── StronglyConnectedComponentsTest.php
│ │ │ ├── TopologicalSortTest.php
│ │ │ └── UnitOfWork/
│ │ │ └── InsertBatchTest.php
│ │ ├── LazyCriteriaCollectionTest.php
│ │ ├── Mapping/
│ │ │ ├── AnsiQuoteStrategyTest.php
│ │ │ ├── AssociationMappingTest.php
│ │ │ ├── AttributeDriverTest.php
│ │ │ ├── AttributeReaderTest.php
│ │ │ ├── BasicInheritanceMappingTest.php
│ │ │ ├── ClassMetadataBuilderTest.php
│ │ │ ├── ClassMetadataFactoryTest.php
│ │ │ ├── ClassMetadataLoadEventTest.php
│ │ │ ├── ClassMetadataTest.php
│ │ │ ├── DefaultQuoteStrategyTest.php
│ │ │ ├── DiscriminatorColumnMappingTest.php
│ │ │ ├── EmbeddedClassMappingTest.php
│ │ │ ├── EntityListenerResolverTest.php
│ │ │ ├── FieldBuilderTest.php
│ │ │ ├── FieldMappingTest.php
│ │ │ ├── Fixtures/
│ │ │ │ └── AttributeEntityWithNestedJoinColumns.php
│ │ │ ├── InverseSideMappingTest.php
│ │ │ ├── JoinColumnMappingTest.php
│ │ │ ├── JoinTableMappingTest.php
│ │ │ ├── ManyToManyOwningSideMappingTest.php
│ │ │ ├── ManyToOneAssociationMappingTest.php
│ │ │ ├── MappingDriverTestCase.php
│ │ │ ├── NamingStrategy/
│ │ │ │ ├── CustomPascalNamingStrategy.php
│ │ │ │ └── JoinColumnClassNamingStrategy.php
│ │ │ ├── NamingStrategyTest.php
│ │ │ ├── OneToOneOwningSideMappingTest.php
│ │ │ ├── OwningSideMappingTest.php
│ │ │ ├── PropertyAccessors/
│ │ │ │ ├── EnumPropertyAccessorTest.php
│ │ │ │ ├── ObjectCastPropertyAccessorTest.php
│ │ │ │ ├── RawValuePropertyAccessorTest.php
│ │ │ │ ├── ReadOnlyAccessorTest.php
│ │ │ │ └── TypedNoDefaultPropertyAccessorTest.php
│ │ │ ├── QuoteStrategyTest.php
│ │ │ ├── ReflectionEmbeddedPropertyTest.php
│ │ │ ├── ReflectionReadonlyPropertyTest.php
│ │ │ ├── StaticPHPMappingDriverTest.php
│ │ │ ├── Symfony/
│ │ │ │ ├── DriverTestCase.php
│ │ │ │ └── XmlDriverTest.php
│ │ │ ├── TableMappingTest.php
│ │ │ ├── ToManyAssociationMappingTest.php
│ │ │ ├── TypedEnumFieldMapperTest.php
│ │ │ ├── TypedFieldMapper/
│ │ │ │ └── CustomIntAsStringTypedFieldMapper.php
│ │ │ ├── TypedFieldMapperTest.php
│ │ │ ├── XmlMappingDriverTest.php
│ │ │ ├── invalid_xml/
│ │ │ │ └── Doctrine.Tests.Models.InvalidXml.dcm.xml
│ │ │ ├── php/
│ │ │ │ ├── Doctrine.Tests.Models.Enums.Card.php
│ │ │ │ ├── Doctrine.Tests.Models.TypedProperties.UserTypedWithCustomTypedField.php
│ │ │ │ ├── Doctrine.Tests.Models.Upsertable.Insertable.php
│ │ │ │ ├── Doctrine.Tests.Models.Upsertable.Updatable.php
│ │ │ │ └── Doctrine.Tests.ORM.Mapping.GH10288EnumTypePerson.php
│ │ │ ├── xml/
│ │ │ │ ├── CatNoId.dcm.xml
│ │ │ │ ├── DDC2429Book.orm.xml
│ │ │ │ ├── DDC2429Novel.orm.xml
│ │ │ │ ├── Doctrine.Tests.Models.CMS.CmsAddress.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.CMS.CmsUser.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.Cache.City.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.Company.CompanyContract.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.Company.CompanyFixContract.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.Company.CompanyFlexContract.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.Company.CompanyFlexUltraContract.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.Company.CompanyPerson.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.Customer.CustomerType.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC117.DDC117Translation.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC3293.DDC3293Address.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC3293.DDC3293User.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC3293.DDC3293UserPrefixed.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC3579.DDC3579Admin.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC3579.DDC3579User.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC5934.DDC5934Contract.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC869.DDC869ChequePayment.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC869.DDC869CreditCardPayment.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC869.DDC869Payment.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC889.DDC889Class.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC889.DDC889Entity.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC889.DDC889SuperClass.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC964.DDC964Admin.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC964.DDC964Guest.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC964.DDC964User.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.Enums.Card.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.GH7141.GH7141Article.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.GH7316.GH7316Article.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.Generic.BooleanModel.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.Project.Project.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.Project.ProjectInvalidMapping.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.TypedProperties.UserTyped.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.TypedProperties.UserTypedWithCustomTypedField.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.Upsertable.Insertable.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.Upsertable.Updatable.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.ValueObjects.Name.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.ValueObjects.Person.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Functional.XmlLegacyTimeEntity.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Functional.XmlTimeEntity.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.Animal.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.BlogPost.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.BlogPostComment.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.CTI.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.Comment.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.DDC1170Entity.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.DDC807Entity.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.GH10288EnumTypePerson.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.ReservedWordInTableColumn.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.SingleTableEntityIncompleteDiscriminatorColumnMapping.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.SingleTableEntityNoDiscriminatorColumnMapping.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.User.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.UserIncorrectAttributes.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.UserIncorrectIndex.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.UserIncorrectUniqueConstraint.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.UserMissingAttributes.dcm.xml
│ │ │ │ └── Doctrine.Tests.ORM.Mapping.XMLSLC.dcm.xml
│ │ │ └── yaml/
│ │ │ ├── Doctrine.Tests.Models.TypedProperties.UserTypedWithCustomTypedField.dcm.yml
│ │ │ └── Doctrine.Tests.ORM.Mapping.GH10288EnumTypePerson.dcm.yml
│ │ ├── ORMInvalidArgumentExceptionTest.php
│ │ ├── ORMSetupTest.php
│ │ ├── Performance/
│ │ │ └── SecondLevelCacheTest.php
│ │ ├── PersistentCollectionTest.php
│ │ ├── Persisters/
│ │ │ ├── BasicEntityPersisterCompositeTypeParametersTest.php
│ │ │ ├── BasicEntityPersisterCompositeTypeSqlTest.php
│ │ │ ├── BasicEntityPersisterTypeValueSqlTest.php
│ │ │ ├── BinaryIdPersisterTest.php
│ │ │ ├── Exception/
│ │ │ │ └── UnrecognizedFieldTest.php
│ │ │ └── ManyToManyPersisterTest.php
│ │ ├── Proxy/
│ │ │ └── ProxyFactoryTest.php
│ │ ├── Query/
│ │ │ ├── CustomTreeWalkersJoinTest.php
│ │ │ ├── CustomTreeWalkersTest.php
│ │ │ ├── DeleteSqlGenerationTest.php
│ │ │ ├── ExprTest.php
│ │ │ ├── FilterCollectionTest.php
│ │ │ ├── LanguageRecognitionTest.php
│ │ │ ├── LexerTest.php
│ │ │ ├── NativeQueryTest.php
│ │ │ ├── ParameterTypeInfererTest.php
│ │ │ ├── ParserResultTest.php
│ │ │ ├── ParserTest.php
│ │ │ ├── QueryExpressionVisitorTest.php
│ │ │ ├── QueryTest.php
│ │ │ ├── SelectSqlGenerationTest.php
│ │ │ ├── SqlExpressionVisitorTest.php
│ │ │ ├── SqlWalkerTest.php
│ │ │ └── UpdateSqlGenerationTest.php
│ │ ├── QueryBuilderTest.php
│ │ ├── Repository/
│ │ │ └── DefaultRepositoryFactoryTest.php
│ │ ├── Tools/
│ │ │ ├── AttachEntityListenersListenerTest.php
│ │ │ ├── Console/
│ │ │ │ ├── Command/
│ │ │ │ │ ├── ClearCacheCollectionRegionCommandTest.php
│ │ │ │ │ ├── ClearCacheEntityRegionCommandTest.php
│ │ │ │ │ ├── ClearCacheQueryRegionCommandTest.php
│ │ │ │ │ ├── Debug/
│ │ │ │ │ │ ├── DebugEntityListenersDoctrineCommandTest.php
│ │ │ │ │ │ ├── DebugEventManagerDoctrineCommandTest.php
│ │ │ │ │ │ └── Fixtures/
│ │ │ │ │ │ ├── BarListener.php
│ │ │ │ │ │ ├── BazListener.php
│ │ │ │ │ │ └── FooListener.php
│ │ │ │ │ ├── InfoCommandTest.php
│ │ │ │ │ ├── MappingDescribeCommandTest.php
│ │ │ │ │ ├── RunDqlCommandTest.php
│ │ │ │ │ ├── SchemaTool/
│ │ │ │ │ │ ├── CommandTestCase.php
│ │ │ │ │ │ ├── CreateCommandTest.php
│ │ │ │ │ │ ├── DropCommandTest.php
│ │ │ │ │ │ └── Models/
│ │ │ │ │ │ └── Keyboard.php
│ │ │ │ │ └── ValidateSchemaCommandTest.php
│ │ │ │ ├── ConsoleRunnerTest.php
│ │ │ │ └── MetadataFilterTest.php
│ │ │ ├── DebugTest.php
│ │ │ ├── Pagination/
│ │ │ │ ├── CountOutputWalkerTest.php
│ │ │ │ ├── CountWalkerTest.php
│ │ │ │ ├── LimitSubqueryOutputWalkerTest.php
│ │ │ │ ├── LimitSubqueryWalkerTest.php
│ │ │ │ ├── PaginationTestCase.php
│ │ │ │ ├── PaginatorTest.php
│ │ │ │ ├── RootTypeWalkerTest.php
│ │ │ │ └── WhereInWalkerTest.php
│ │ │ ├── ResolveTargetEntityListenerTest.php
│ │ │ ├── SchemaToolTest.php
│ │ │ ├── SchemaValidatorTest.php
│ │ │ └── TestAsset/
│ │ │ ├── ChildClass.php
│ │ │ ├── ChildWithSameAttributesClass.php
│ │ │ └── ParentClass.php
│ │ ├── UnitOfWorkTest.php
│ │ └── Utility/
│ │ ├── HierarchyDiscriminatorResolverTest.php
│ │ ├── IdentifierFlattenerEnumIdTest.php
│ │ └── IdentifierFlattenerTest.php
│ ├── OrmFunctionalTestCase.php
│ ├── OrmTestCase.php
│ ├── Proxy/
│ │ └── AutoloaderTest.php
│ ├── TestInit.php
│ └── TestUtil.php
└── dbproperties.xml.dev
================================================
FILE CONTENTS
================================================
================================================
FILE: .doctrine-project.json
================================================
{
"active": true,
"name": "Object Relational Mapper",
"shortName": "ORM",
"slug": "orm",
"docsSlug": "doctrine-orm",
"versions": [
{
"name": "4.0",
"branchName": "4.0.x",
"slug": "latest",
"upcoming": true
},
{
"name": "3.7",
"branchName": "3.7.x",
"slug": "3.7",
"upcoming": true
},
{
"name": "3.6",
"branchName": "3.6.x",
"slug": "3.6",
"current": true
},
{
"name": "2.21",
"branchName": "2.21.x",
"slug": "2.21",
"upcoming": true
},
{
"name": "2.20",
"branchName": "2.20.x",
"slug": "2.20",
"maintained": true
},
{
"name": "2.19",
"slug": "2.19",
"maintained": false
},
{
"name": "2.18",
"slug": "2.18",
"maintained": false
},
{
"name": "2.17",
"slug": "2.17",
"maintained": false
},
{
"name": "2.16",
"slug": "2.16",
"maintained": false
},
{
"name": "2.15",
"slug": "2.15",
"maintained": false
},
{
"name": "2.14",
"slug": "2.14",
"maintained": false
}
]
}
================================================
FILE: .gitattributes
================================================
/.github export-ignore
/ci export-ignore
/docs export-ignore
/tests export-ignore
/tools export-ignore
.doctrine-project.json export-ignore
.gitattributes export-ignore
.gitignore export-ignore
build.properties export-ignore
build.properties.dev export-ignore
build.xml export-ignore
CONTRIBUTING.md export-ignore
phpunit.xml.dist export-ignore
phpcs.xml.dist export-ignore
phpbench.json export-ignore
phpstan.neon export-ignore
phpstan-baseline.neon export-ignore
phpstan-dbal3.neon export-ignore
phpstan-params.neon export-ignore
phpstan-persistence2.neon export-ignore
================================================
FILE: .github/PULL_REQUEST_TEMPLATE/Failing_Test.md
================================================
---
name: 🐞 Failing Test
about: You found a bug and have a failing Unit or Functional test? 🔨
---
### Failing Test
<!-- Fill in the relevant information below to help triage your issue. -->
| Q | A
|------------ | ------
| BC Break | yes/no
| Version | x.y.z
#### Summary
<!-- Provide a summary of the failing scenario. -->
================================================
FILE: .github/PULL_REQUEST_TEMPLATE/Improvement.md
================================================
---
name: ⚙ Improvement
about: You have some improvement to make Doctrine better? 🎁
---
### Improvement
<!-- Fill in the relevant information below to help triage your issue. -->
| Q | A
|------------ | ------
| New Feature | yes
| RFC | yes/no
| BC Break | yes/no
#### Summary
<!-- Provide a summary of the improvement you are submitting. -->
================================================
FILE: .github/PULL_REQUEST_TEMPLATE/New_Feature.md
================================================
---
name: 🎉 New Feature
about: You have implemented some neat idea that you want to make part of Doctrine? 🎩
---
<!--
Thank you for submitting new feature!
Pick the target branch based according to these criteria:
* submitting a bugfix: target the lowest active stable branch: 2.9.x
* submitting a new feature: target the next minor branch: 2.10.x
* submitting a BC-breaking change: target the next major branch: 3.0.x
-->
### New Feature
<!-- Fill in the relevant information below to help triage your issue. -->
| Q | A
|------------ | ------
| New Feature | yes
| RFC | yes/no
| BC Break | yes/no
#### Summary
<!-- Provide a summary of the feature you have implemented. -->
================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
labels:
- "CI"
target-branch: "2.20.x"
================================================
FILE: .github/workflows/coding-standards.yml
================================================
name: "Coding Standards"
on:
pull_request:
branches:
- "*.x"
paths:
- .github/workflows/coding-standards.yml
- bin/**
- composer.*
- src/**
- phpcs.xml.dist
- tests/**
push:
branches:
- "*.x"
paths:
- .github/workflows/coding-standards.yml
- bin/**
- composer.*
- src/**
- phpcs.xml.dist
- tests/**
jobs:
coding-standards:
uses: "doctrine/.github/.github/workflows/coding-standards.yml@13.1.0"
================================================
FILE: .github/workflows/composer-lint.yml
================================================
name: "Composer Lint"
on:
pull_request:
branches:
- "*.x"
paths:
- ".github/workflows/composer-lint.yml"
- "composer.json"
push:
branches:
- "*.x"
paths:
- ".github/workflows/composer-lint.yml"
- "composer.json"
jobs:
composer-lint:
name: "Composer Lint"
uses: "doctrine/.github/.github/workflows/composer-lint.yml@13.1.0"
================================================
FILE: .github/workflows/continuous-integration.yml
================================================
name: "CI: PHPUnit"
on:
pull_request:
branches:
- "*.x"
paths:
- .github/workflows/continuous-integration.yml
- ci/**
- composer.*
- src/**
- tests/**
push:
branches:
- "*.x"
paths:
- .github/workflows/continuous-integration.yml
- ci/**
- composer.*
- src/**
- tests/**
env:
fail-fast: true
jobs:
phpunit-smoke-check:
name: >
SQLite -
${{ format('PHP {0} - DBAL {1} - ext. {2} - proxy {3}',
matrix.php-version || 'Ø',
matrix.dbal-version || 'Ø',
matrix.extension || 'Ø',
matrix.proxy || 'Ø'
) }}
runs-on: "ubuntu-22.04"
strategy:
matrix:
php-version:
- "8.1"
- "8.2"
- "8.3"
- "8.4"
- "8.5"
dbal-version:
- "default"
- "3.7"
extension:
- "sqlite3"
- "pdo_sqlite"
deps:
- "highest"
stability:
- "stable"
native_lazy:
- "0"
include:
- php-version: "8.2"
dbal-version: "4@dev"
extension: "pdo_sqlite"
stability: "stable"
native_lazy: "0"
- php-version: "8.2"
dbal-version: "4@dev"
extension: "sqlite3"
stability: "stable"
native_lazy: "0"
- php-version: "8.1"
dbal-version: "default"
deps: "lowest"
extension: "pdo_sqlite"
stability: "stable"
native_lazy: "0"
- php-version: "8.4"
dbal-version: "default"
deps: "highest"
extension: "pdo_sqlite"
stability: "stable"
native_lazy: "1"
- php-version: "8.4"
dbal-version: "default"
deps: "highest"
extension: "sqlite3"
stability: "dev"
native_lazy: "1"
steps:
- name: "Checkout"
uses: "actions/checkout@v6"
with:
fetch-depth: 2
- name: "Install PHP"
uses: "shivammathur/setup-php@v2"
with:
php-version: "${{ matrix.php-version }}"
extensions: "apcu, pdo, ${{ matrix.extension }}"
coverage: "pcov"
ini-values: "zend.assertions=1, apc.enable_cli=1"
- name: "Allow dev dependencies"
run: |
composer config minimum-stability dev
composer remove --no-update --dev phpbench/phpbench phpdocumentor/guides-cli
composer require --no-update symfony/console:^8 symfony/var-exporter:^8 doctrine/dbal:^4.4
composer require --dev --no-update symfony/cache:^8
if: "${{ matrix.stability == 'dev' }}"
- name: "Require specific DBAL version"
run: "composer require doctrine/dbal ^${{ matrix.dbal-version }} --no-update"
if: "${{ matrix.dbal-version != 'default' }}"
- name: "Downgrade VarExporter"
run: 'composer require --no-update "symfony/var-exporter:^6.4 || ^7.4"'
if: "${{ matrix.native_lazy == '0' }}"
- name: "Install dependencies with Composer"
uses: "ramsey/composer-install@v3"
with:
composer-options: "--ignore-platform-req=php+"
dependency-versions: "${{ matrix.deps }}"
- name: "Run PHPUnit"
run: "vendor/bin/phpunit -c ci/github/phpunit/${{ matrix.extension }}.xml --coverage-clover=coverage-no-cache.xml"
env:
ENABLE_SECOND_LEVEL_CACHE: 0
ENABLE_NATIVE_LAZY_OBJECTS: ${{ matrix.native_lazy }}
- name: "Run PHPUnit with Second Level Cache and PHPUnit 10"
run: |
vendor/bin/phpunit -c ci/github/phpunit/${{ matrix.extension }}.xml \
--exclude-group=performance,non-cacheable,locking_functional \
--coverage-clover=coverage-cache.xml
if: "${{ matrix.php-version == '8.1' }}"
env:
ENABLE_SECOND_LEVEL_CACHE: 1
ENABLE_NATIVE_LAZY_OBJECTS: ${{ matrix.native_lazy }}
- name: "Run PHPUnit with Second Level Cache and PHPUnit 11+"
run: |
vendor/bin/phpunit -c ci/github/phpunit/${{ matrix.extension }}.xml \
--exclude-group=performance \
--exclude-group=non-cacheable \
--exclude-group=locking_functional \
--coverage-clover=coverage-cache.xml
if: "${{ matrix.php-version != '8.1' }}"
env:
ENABLE_SECOND_LEVEL_CACHE: 1
ENABLE_NATIVE_LAZY_OBJECTS: ${{ matrix.native_lazy }}
- name: "Upload coverage file"
uses: "actions/upload-artifact@v7"
with:
name: "phpunit-${{ matrix.extension }}-${{ matrix.php-version }}-${{ matrix.dbal-version }}-${{ matrix.deps }}-${{ matrix.stability }}-${{ matrix.native_lazy }}-coverage"
path: "coverage*.xml"
phpunit-deprecations:
name: "PHPUnit (fail on deprecations)"
runs-on: "ubuntu-24.04"
steps:
- name: "Checkout"
uses: "actions/checkout@v5"
with:
fetch-depth: 2
- name: "Install PHP"
uses: "shivammathur/setup-php@v2"
with:
php-version: "8.5"
extensions: "apcu, pdo, sqlite3"
coverage: "pcov"
ini-values: "zend.assertions=1, apc.enable_cli=1"
- name: "Allow dev dependencies"
run: composer config minimum-stability dev
- name: "Install dependencies with Composer"
uses: "ramsey/composer-install@v3"
with:
composer-options: "--ignore-platform-req=php+"
dependency-versions: "highest"
- name: "Run PHPUnit"
run: "vendor/bin/phpunit -c ci/github/phpunit/sqlite3.xml --fail-on-deprecation"
env:
ENABLE_SECOND_LEVEL_CACHE: 0
ENABLE_NATIVE_LAZY_OBJECTS: 1
phpunit-postgres:
name: >
${{ format('PostgreSQL {0} - PHP {1} - DBAL {2} - ext. {3}',
matrix.postgres-version || 'Ø',
matrix.php-version || 'Ø',
matrix.dbal-version || 'Ø',
matrix.extension || 'Ø'
) }}
runs-on: "ubuntu-22.04"
needs: "phpunit-smoke-check"
strategy:
matrix:
php-version:
- "8.2"
- "8.3"
- "8.4"
- "8.5"
dbal-version:
- "default"
- "3.7"
postgres-version:
- "17"
extension:
- pdo_pgsql
- pgsql
include:
- php-version: "8.2"
dbal-version: "4@dev"
postgres-version: "14"
extension: pdo_pgsql
- php-version: "8.2"
dbal-version: "3.7"
postgres-version: "9.6"
extension: pdo_pgsql
services:
postgres:
image: "postgres:${{ matrix.postgres-version }}"
env:
POSTGRES_PASSWORD: "postgres"
options: >-
--health-cmd "pg_isready"
ports:
- "5432:5432"
steps:
- name: "Checkout"
uses: "actions/checkout@v6"
with:
fetch-depth: 2
- name: "Install PHP"
uses: "shivammathur/setup-php@v2"
with:
php-version: "${{ matrix.php-version }}"
extensions: "pgsql pdo_pgsql"
coverage: "pcov"
ini-values: "zend.assertions=1, apc.enable_cli=1"
- name: "Require specific DBAL version"
run: "composer require doctrine/dbal ^${{ matrix.dbal-version }} --no-update"
if: "${{ matrix.dbal-version != 'default' }}"
- name: "Install dependencies with Composer"
uses: "ramsey/composer-install@v3"
with:
composer-options: "--ignore-platform-req=php+"
- name: "Run PHPUnit"
run: "vendor/bin/phpunit -c ci/github/phpunit/pdo_pgsql.xml --coverage-clover=coverage.xml"
- name: "Upload coverage file"
uses: "actions/upload-artifact@v7"
with:
name: "${{ github.job }}-${{ matrix.postgres-version }}-${{ matrix.php-version }}-${{ matrix.dbal-version }}-${{ matrix.extension }}-coverage"
path: "coverage.xml"
phpunit-mariadb:
name: >
${{ format('MariaDB {0} - PHP {1} - DBAL {2} - ext. {3}',
matrix.mariadb-version || 'Ø',
matrix.php-version || 'Ø',
matrix.dbal-version || 'Ø',
matrix.extension || 'Ø'
) }}
runs-on: "ubuntu-22.04"
needs: "phpunit-smoke-check"
strategy:
matrix:
php-version:
- "8.2"
- "8.3"
- "8.4"
- "8.5"
dbal-version:
- "default"
- "3.7"
- "4@dev"
mariadb-version:
- "11.4"
extension:
- "mysqli"
- "pdo_mysql"
services:
mariadb:
image: "mariadb:${{ matrix.mariadb-version }}"
env:
MARIADB_ALLOW_EMPTY_ROOT_PASSWORD: yes
MARIADB_DATABASE: "doctrine_tests"
options: >-
--health-cmd "healthcheck.sh --connect --innodb_initialized"
ports:
- "3306:3306"
steps:
- name: "Checkout"
uses: "actions/checkout@v6"
with:
fetch-depth: 2
- name: "Require specific DBAL version"
run: "composer require doctrine/dbal ^${{ matrix.dbal-version }} --no-update"
if: "${{ matrix.dbal-version != 'default' }}"
- name: "Install PHP"
uses: "shivammathur/setup-php@v2"
with:
php-version: "${{ matrix.php-version }}"
coverage: "pcov"
ini-values: "zend.assertions=1, apc.enable_cli=1"
extensions: "${{ matrix.extension }}"
- name: "Install dependencies with Composer"
uses: "ramsey/composer-install@v3"
with:
composer-options: "--ignore-platform-req=php+"
- name: "Run PHPUnit"
run: "vendor/bin/phpunit -c ci/github/phpunit/${{ matrix.extension }}.xml --coverage-clover=coverage.xml"
- name: "Upload coverage file"
uses: "actions/upload-artifact@v7"
with:
name: "${{ github.job }}-${{ matrix.mariadb-version }}-${{ matrix.extension }}-${{ matrix.php-version }}-${{ matrix.dbal-version }}-coverage"
path: "coverage.xml"
phpunit-mysql:
name: >
${{ format('MySQL {0} - PHP {1} - DBAL {2} - ext. {3}',
matrix.mysql-version || 'Ø',
matrix.php-version || 'Ø',
matrix.dbal-version || 'Ø',
matrix.extension || 'Ø'
) }}
runs-on: "ubuntu-22.04"
needs: "phpunit-smoke-check"
strategy:
matrix:
php-version:
- "8.2"
- "8.3"
- "8.4"
- "8.5"
dbal-version:
- "default"
- "3.7"
mysql-version:
- "5.7"
- "8.0"
extension:
- "mysqli"
- "pdo_mysql"
include:
- php-version: "8.2"
dbal-version: "4@dev"
mysql-version: "8.0"
extension: "mysqli"
- php-version: "8.2"
dbal-version: "4@dev"
mysql-version: "8.0"
extension: "pdo_mysql"
services:
mysql:
image: "mysql:${{ matrix.mysql-version }}"
options: >-
--health-cmd "mysqladmin ping --silent"
-e MYSQL_ALLOW_EMPTY_PASSWORD=yes
-e MYSQL_DATABASE=doctrine_tests
ports:
- "3306:3306"
steps:
- name: "Checkout"
uses: "actions/checkout@v6"
with:
fetch-depth: 2
- name: "Install PHP"
uses: "shivammathur/setup-php@v2"
with:
php-version: "${{ matrix.php-version }}"
coverage: "pcov"
ini-values: "zend.assertions=1, apc.enable_cli=1"
extensions: "${{ matrix.extension }}"
- name: "Require specific DBAL version"
run: "composer require doctrine/dbal ^${{ matrix.dbal-version }} --no-update"
if: "${{ matrix.dbal-version != 'default' }}"
- name: "Install dependencies with Composer"
uses: "ramsey/composer-install@v3"
with:
composer-options: "--ignore-platform-req=php+"
- name: "Run PHPUnit"
run: "vendor/bin/phpunit -c ci/github/phpunit/${{ matrix.extension }}.xml --coverage-clover=coverage-no-cache.xml"
env:
ENABLE_SECOND_LEVEL_CACHE: 0
- name: "Run PHPUnit with Second Level Cache and PHPUnit 10"
run: |
vendor/bin/phpunit -c ci/github/phpunit/${{ matrix.extension }}.xml \
--exclude-group=performance,non-cacheable,locking_functional \
--coverage-clover=coverage-no-cache.xml"
if: "${{ matrix.php-version == '8.1' }}"
env:
ENABLE_SECOND_LEVEL_CACHE: 1
- name: "Run PHPUnit with Second Level Cache and PHPUnit 11+"
run: |
vendor/bin/phpunit -c ci/github/phpunit/${{ matrix.extension }}.xml \
--exclude-group=performance \
--exclude-group=non-cacheable \
--exclude-group=locking_functional \
--coverage-clover=coverage-no-cache.xml
if: "${{ matrix.php-version != '8.1' }}"
env:
ENABLE_SECOND_LEVEL_CACHE: 1
- name: "Upload coverage files"
uses: "actions/upload-artifact@v7"
with:
name: "${{ github.job }}-${{ matrix.mysql-version }}-${{ matrix.extension }}-${{ matrix.php-version }}-${{ matrix.dbal-version }}-coverage"
path: "coverage*.xml"
upload_coverage:
name: "Upload coverage to Codecov"
runs-on: "ubuntu-22.04"
# Only run on PRs from forks
if: "github.event.pull_request.head.repo.full_name != github.repository"
needs:
- "phpunit-smoke-check"
- "phpunit-postgres"
- "phpunit-mariadb"
- "phpunit-mysql"
steps:
- name: "Checkout"
uses: "actions/checkout@v6"
with:
fetch-depth: 2
- name: "Download coverage files"
uses: "actions/download-artifact@v8"
with:
path: "reports"
- name: "Upload to Codecov"
uses: "codecov/codecov-action@v5"
with:
directory: reports
env:
CODECOV_TOKEN: "${{ secrets.CODECOV_TOKEN }}"
================================================
FILE: .github/workflows/documentation.yml
================================================
name: "Documentation"
on:
pull_request:
branches:
- "*.x"
paths:
- ".github/workflows/documentation.yml"
- "docs/**"
push:
branches:
- "*.x"
paths:
- ".github/workflows/documentation.yml"
- "docs/**"
jobs:
documentation:
name: "Documentation"
uses: "doctrine/.github/.github/workflows/documentation.yml@13.1.0"
================================================
FILE: .github/workflows/phpbench.yml
================================================
name: "Performance benchmark"
on:
pull_request:
branches:
- "*.x"
paths:
- .github/workflows/phpbench.yml
- composer.*
- src/**
- phpbench.json
- tests/**
push:
branches:
- "*.x"
paths:
- .github/workflows/phpbench.yml
- composer.*
- src/**
- phpbench.json
- tests/**
env:
fail-fast: true
jobs:
phpbench:
name: "PHPBench"
runs-on: "ubuntu-22.04"
strategy:
matrix:
php-version:
- "8.1"
steps:
- name: "Checkout"
uses: "actions/checkout@v6"
with:
fetch-depth: 2
- name: "Install PHP"
uses: "shivammathur/setup-php@v2"
with:
php-version: "${{ matrix.php-version }}"
coverage: "pcov"
ini-values: "zend.assertions=1, apc.enable_cli=1"
- name: "Install dependencies with Composer"
uses: "ramsey/composer-install@v3"
- name: "Run PHPBench"
run: "vendor/bin/phpbench run --report=default"
================================================
FILE: .github/workflows/release-on-milestone-closed.yml
================================================
name: "Automatic Releases"
on:
milestone:
types:
- "closed"
jobs:
release:
uses: "doctrine/.github/.github/workflows/release-on-milestone-closed.yml@13.1.0"
secrets:
GIT_AUTHOR_EMAIL: ${{ secrets.GIT_AUTHOR_EMAIL }}
GIT_AUTHOR_NAME: ${{ secrets.GIT_AUTHOR_NAME }}
ORGANIZATION_ADMIN_TOKEN: ${{ secrets.ORGANIZATION_ADMIN_TOKEN }}
SIGNING_SECRET_KEY: ${{ secrets.SIGNING_SECRET_KEY }}
================================================
FILE: .github/workflows/stale.yml
================================================
name: 'Close stale pull requests'
on:
schedule:
- cron: '0 3 * * *'
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9
with:
stale-pr-message: >
There hasn't been any activity on this pull request in the past 90 days, so
it has been marked as stale and it will be closed automatically if no
further activity occurs in the next 7 days.
If you want to continue working on it, please leave a comment.
close-pr-message: >
This pull request was closed due to inactivity.
days-before-stale: -1
days-before-pr-stale: 90
days-before-pr-close: 7
================================================
FILE: .github/workflows/static-analysis.yml
================================================
name: "Static Analysis"
on:
pull_request:
branches:
- "*.x"
paths:
- .github/workflows/static-analysis.yml
- composer.*
- src/**
- phpstan*
- tests/StaticAnalysis/**
push:
branches:
- "*.x"
paths:
- .github/workflows/static-analysis.yml
- composer.*
- src/**
- phpstan*
- tests/StaticAnalysis/**
jobs:
static-analysis-phpstan:
name: Static Analysis with PHPStan
runs-on: ubuntu-22.04
strategy:
matrix:
include:
- dbal-version: default
config: phpstan.neon
- dbal-version: 3.8.2
config: phpstan-dbal3.neon
steps:
- name: "Checkout code"
uses: "actions/checkout@v6"
- name: Install PHP
uses: shivammathur/setup-php@v2
with:
coverage: none
php-version: "8.4"
tools: cs2pr
- name: Require specific DBAL version
run: "composer require doctrine/dbal ^${{ matrix.dbal-version }} --no-update"
if: "${{ matrix.dbal-version != 'default' }}"
- name: Install dependencies with Composer
uses: ramsey/composer-install@v2
- name: Run static analysis with phpstan/phpstan
run: "vendor/bin/phpstan analyse -c ${{ matrix.config }} --error-format=checkstyle | cs2pr"
================================================
FILE: .github/workflows/website-schema.yml
================================================
name: "Website config validation"
on:
pull_request:
branches:
- "*.x"
paths:
- ".doctrine-project.json"
- ".github/workflows/website-schema.yml"
push:
branches:
- "*.x"
paths:
- ".doctrine-project.json"
- ".github/workflows/website-schema.yml"
jobs:
json-validate:
name: "Validate JSON schema"
uses: "doctrine/.github/.github/workflows/website-schema.yml@7.1.0"
================================================
FILE: .gitignore
================================================
build/
logs/
reports/
dist/
download/
/.settings/
.buildpath
.project
.idea
*.iml
vendor/
/tests/Doctrine/Performance/history.db
/.phpcs-cache
composer.lock
.phpunit.cache
.phpunit.result.cache
/*.phpunit.xml
================================================
FILE: CONTRIBUTING.md
================================================
# Contribute to Doctrine
Thank you for contributing to Doctrine!
Before we can merge your Pull-Request here are some guidelines that you need to follow.
These guidelines exist not to annoy you, but to keep the code base clean,
unified and future proof.
Doctrine has [general contributing guidelines][contributor workflow], make
sure you follow them.
[contributor workflow]: https://www.doctrine-project.org/contribute/index.html
## Coding Standard
This project follows [`doctrine/coding-standard`][coding standard homepage].
You may fix many some of the issues with `vendor/bin/phpcbf`.
[coding standard homepage]: https://github.com/doctrine/coding-standard
## Unit-Tests
Please try to add a test for your pull-request.
* If you want to fix a bug or provide a reproduce case, create a test file in
``tests/Tests/ORM/Functional/Ticket`` with the name of the ticket,
``DDC1234Test.php`` for example.
* If you want to contribute new functionality add unit- or functional tests
depending on the scope of the feature.
You can run the unit-tests by calling ``vendor/bin/phpunit`` from the root of the project.
It will run all the tests with an in memory SQLite database.
In order to do that, you will need a fresh copy of the ORM, and you
will have to run a composer installation in the project:
```sh
git clone git@github.com:doctrine/orm.git
cd orm
composer install
```
You will also need to enable the PHP extension that provides the SQLite driver
for PDO: `pdo_sqlite`. How to do so depends on your system, but checking that it
is enabled can universally be done with `php -m`: that command should list the
extension.
To run the testsuite against another database, copy the ``phpunit.xml.dist``
to for example ``mysql.phpunit.xml`` and edit the parameters. You can
take a look at the ``ci/github/phpunit`` directory for some examples. Then run:
vendor/bin/phpunit -c mysql.phpunit.xml
If you do not provide these parameters, the test suite will use an in-memory
sqlite database.
Tips for creating unit tests:
1. If you put a test into the `Ticket` namespace as described above, put the testcase and all entities into the same class.
See `https://github.com/doctrine/orm/tree/3.0.x/tests/Tests/ORM/Functional/Ticket/DDC2306Test.php` for an
example.
## Getting merged
Please allow us time to review your pull requests. We will give our best to review
everything as fast as possible, but cannot always live up to our own expectations.
Thank you very much again for your contribution!
================================================
FILE: LICENSE
================================================
Copyright (c) Doctrine Project
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
| [4.0.x][4.0] | [3.7.x][3.7] | [3.6.x][3.6] | [2.21.x][2.21] | [2.20.x][2.20] |
|:------------------------------------------------------:|:------------------------------------------------------:|:------------------------------------------------------:|:--------------------------------------------------------:|:--------------------------------------------------------:|
| [![Build status][4.0 image]][4.0 workflow] | [![Build status][3.7 image]][3.7 workflow] | [![Build status][3.6 image]][3.6 workflow] | [![Build status][2.21 image]][2.21 workflow] | [![Build status][2.20 image]][2.20 workflow] |
| [![Coverage Status][4.0 coverage image]][4.0 coverage] | [![Coverage Status][3.7 coverage image]][3.7 coverage] | [![Coverage Status][3.6 coverage image]][3.6 coverage] | [![Coverage Status][2.21 coverage image]][2.21 coverage] | [![Coverage Status][2.20 coverage image]][2.20 coverage] |
Doctrine ORM is an object-relational mapper for PHP 8.1+ that provides transparent persistence
for PHP objects. It sits on top of a powerful database abstraction layer (DBAL). One of its key features
is the option to write database queries in a proprietary object oriented SQL dialect called Doctrine Query Language (DQL),
inspired by Hibernate's HQL. This provides developers with a powerful alternative to SQL that maintains flexibility
without requiring unnecessary code duplication.
## More resources:
* [Website](http://www.doctrine-project.org)
* [Documentation](https://www.doctrine-project.org/projects/doctrine-orm/en/stable/index.html)
[4.0 image]: https://github.com/doctrine/orm/actions/workflows/continuous-integration.yml/badge.svg?branch=4.0.x
[4.0]: https://github.com/doctrine/orm/tree/4.0.x
[4.0 workflow]: https://github.com/doctrine/orm/actions/workflows/continuous-integration.yml?query=branch%3A4.0.x
[4.0 coverage image]: https://codecov.io/gh/doctrine/orm/branch/4.0.x/graph/badge.svg
[4.0 coverage]: https://codecov.io/gh/doctrine/orm/branch/4.0.x
[3.7 image]: https://github.com/doctrine/orm/actions/workflows/continuous-integration.yml/badge.svg?branch=3.7.x
[3.7]: https://github.com/doctrine/orm/tree/3.7.x
[3.7 workflow]: https://github.com/doctrine/orm/actions/workflows/continuous-integration.yml?query=branch%3A3.7.x
[3.7 coverage image]: https://codecov.io/gh/doctrine/orm/branch/3.7.x/graph/badge.svg
[3.7 coverage]: https://codecov.io/gh/doctrine/orm/branch/3.7.x
[3.6 image]: https://github.com/doctrine/orm/actions/workflows/continuous-integration.yml/badge.svg?branch=3.6.x
[3.6]: https://github.com/doctrine/orm/tree/3.6.x
[3.6 workflow]: https://github.com/doctrine/orm/actions/workflows/continuous-integration.yml?query=branch%3A3.6.x
[3.6 coverage image]: https://codecov.io/gh/doctrine/orm/branch/3.6.x/graph/badge.svg
[3.6 coverage]: https://codecov.io/gh/doctrine/orm/branch/3.6.x
[2.21 image]: https://github.com/doctrine/orm/actions/workflows/continuous-integration.yml/badge.svg?branch=2.21.x
[2.21]: https://github.com/doctrine/orm/tree/2.21.x
[2.21 workflow]: https://github.com/doctrine/orm/actions/workflows/continuous-integration.yml?query=branch%3A2.21.x
[2.21 coverage image]: https://codecov.io/gh/doctrine/orm/branch/2.21.x/graph/badge.svg
[2.21 coverage]: https://codecov.io/gh/doctrine/orm/branch/2.21.x
[2.20 image]: https://github.com/doctrine/orm/actions/workflows/continuous-integration.yml/badge.svg?branch=2.20.x
[2.20]: https://github.com/doctrine/orm/tree/2.20.x
[2.20 workflow]: https://github.com/doctrine/orm/actions/workflows/continuous-integration.yml?query=branch%3A2.20.x
[2.20 coverage image]: https://codecov.io/gh/doctrine/orm/branch/2.20.x/graph/badge.svg
[2.20 coverage]: https://codecov.io/gh/doctrine/orm/branch/2.20.x
================================================
FILE: SECURITY.md
================================================
Security
========
The Doctrine library is operating very close to your database and as such needs
to handle and make assumptions about SQL injection vulnerabilities.
It is vital that you understand how Doctrine approaches security, because
we cannot protect you from SQL injection.
Please read the documentation chapter on Security in Doctrine DBAL and ORM to
understand the assumptions we make.
- [DBAL Security Page](https://www.doctrine-project.org/projects/doctrine-dbal/en/stable/reference/security.html)
- [ORM Security Page](https://www.doctrine-project.org/projects/doctrine-orm/en/stable/reference/security.html)
If you find a Security bug in Doctrine, please follow our
[Security reporting guidelines](https://www.doctrine-project.org/policies/security.html#reporting).
================================================
FILE: UPGRADE.md
================================================
Note about upgrading: Doctrine uses static and runtime mechanisms to raise
awareness about deprecated code.
- Use of `@deprecated` docblock that is detected by IDEs (like PHPStorm) or
Static Analysis tools (like Psalm, phpstan)
- Use of our low-overhead runtime deprecation API, details:
https://github.com/doctrine/deprecations/
# Upgrade to 3.x General Notes
We recommend you upgrade to DBAL 3 first before upgrading to ORM 3. See
the DBAL upgrade docs: https://github.com/doctrine/dbal/blob/3.10.x/UPGRADE.md
Rather than doing several major upgrades at once, we recommend you do the following:
- upgrade to DBAL 3
- deploy and monitor
- upgrade to ORM 3
- deploy and monitor
- upgrade to DBAL 4
- deploy and monitor
If you are using Symfony, the recommended minimal Doctrine Bundle version is 2.15
to run with ORM 3.
At this point, we recommend upgrading to PHP 8.4 first and then directly from
ORM 2.19 to 3.5 and up so that you can skip the lazy ghost proxy generation
and directly start using native lazy objects.
# Upgrade to 3.6
## Deprecate using string expression for default values in mappings
Using a string expression for default values in field mappings is deprecated.
Use `Doctrine\DBAL\Schema\DefaultExpression` instances instead.
Here is how to address this deprecation when mapping entities using PHP attributes:
```diff
use DateTime;
+use Doctrine\DBAL\Schema\DefaultExpression\CurrentDate;
+use Doctrine\DBAL\Schema\DefaultExpression\CurrentTime;
+use Doctrine\DBAL\Schema\DefaultExpression\CurrentTimestamp;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity]
final class TimeEntity
{
#[ORM\Id]
#[ORM\Column]
public int $id;
- #[ORM\Column(options: ['default' => 'CURRENT_TIMESTAMP'], insertable: false, updatable: false)]
+ #[ORM\Column(options: ['default' => new CurrentTimestamp()], insertable: false, updatable: false)]
public DateTime $createdAt;
- #[ORM\Column(options: ['default' => 'CURRENT_TIME'], insertable: false, updatable: false)]
+ #[ORM\Column(options: ['default' => new CurrentTime()], insertable: false, updatable: false)]
public DateTime $createdTime;
- #[ORM\Column(options: ['default' => 'CURRENT_DATE'], insertable: false, updatable: false)]
+ #[ORM\Column(options: ['default' => new CurrentDate()], insertable: false, updatable: false)]
public DateTime $createdDate;
}
```
Here is how to do the same when mapping entities using XML:
```diff
<?xml version="1.0" encoding="UTF-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
https://www.doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="Doctrine\Tests\ORM\Functional\XmlTimeEntity">
<id name="id" type="integer" column="id">
<generator strategy="AUTO"/>
</id>
<field name="createdAt" type="datetime" insertable="false" updatable="false">
<options>
- <option name="default">CURRENT_TIMESTAMP</option>
+ <option name="default">
+ <object class="Doctrine\DBAL\Schema\DefaultExpression\CurrentTimestamp"/>
+ </option>
</options>
</field>
<field name="createdAtImmutable" type="datetime_immutable" insertable="false" updatable="false">
<options>
- <option name="default">CURRENT_TIMESTAMP</option>
+ <option name="default">
+ <object class="Doctrine\DBAL\Schema\DefaultExpression\CurrentTimestamp"/>
+ </option>
</options>
</field>
<field name="createdTime" type="time" insertable="false" updatable="false">
<options>
- <option name="default">CURRENT_TIME</option>
+ <option name="default">
+ <object class="Doctrine\DBAL\Schema\DefaultExpression\CurrentTime"/>
+ </option>
</options>
</field>
<field name="createdDate" type="date" insertable="false" updatable="false">
<options>
- <option name="default">CURRENT_DATE</option>
+ <option name="default">
+ <object class="Doctrine\DBAL\Schema\DefaultExpression\CurrentDate"/>
+ </option>
</options>
</field>
</entity>
</doctrine-mapping>
```
## Deprecate `FieldMapping::$default`
The `default` property of `Doctrine\ORM\Mapping\FieldMapping` is deprecated and
will be removed in 4.0. Instead, use `FieldMapping::$options['default']`.
## Deprecate specifying `nullable` on columns that end up being used in a primary key
Specifying `nullable` on join columns that are part of a primary key is
deprecated and will be an error in 4.0.
This can happen when using a join column mapping together with an id mapping,
or when using a join column mapping or an inverse join column mapping on a
many-to-many relationship.
```diff
class User
{
#[ORM\Id]
#[ORM\Column(type: 'integer')]
private int $id;
#[ORM\Id]
#[ORM\ManyToOne(targetEntity: Family::class, inversedBy: 'users')]
- #[ORM\JoinColumn(name: 'family_id', referencedColumnName: 'id', nullable: true)]
+ #[ORM\JoinColumn(name: 'family_id', referencedColumnName: 'id')]
private ?Family $family;
#[ORM\ManyToMany(targetEntity: Group::class)]
#[ORM\JoinTable(name: 'user_group')]
- #[ORM\JoinColumn(name: 'user_id', referencedColumnName: 'id', nullable: true)]
- #[ORM\InverseJoinColumn(name: 'group_id', referencedColumnName: 'id', nullable: true)]
+ #[ORM\JoinColumn(name: 'user_id', referencedColumnName: 'id')]
+ #[ORM\InverseJoinColumn(name: 'group_id', referencedColumnName: 'id')]
private Collection $groups;
}
```
## Deprecate `Doctrine\ORM\QueryBuilder::add('join', ...)` with a list of join parts
Using `Doctrine\ORM\QueryBuilder::add('join', ...)` with a list of join parts
is deprecated in favor of using an associative array of join parts with the
root alias as key.
## Deprecate using the `WITH` keyword for arbitrary DQL joins
Using the `WITH` keyword to specify the condition for an arbitrary DQL join is
deprecated in favor of using the `ON` keyword (similar to the SQL syntax for
joins).
The `WITH` keyword is now meant to be used only for filtering conditions in
association joins.
# Upgrade to 3.5
See the General notes to upgrading to 3.x versions above.
## Deprecate not using native lazy objects on PHP 8.4+
Having native lazy objects disabled on PHP 8.4+ is deprecated and will not be
possible in 4.0.
You can enable them through configuration:
```php
$config->enableNativeLazyObjects(true);
```
As a consequence, methods, parameters and commands related to userland lazy
objects have been deprecated on PHP 8.4+:
- `Doctrine\ORM\Tools\Console\Command\GenerateProxiesCommand`
- `Doctrine\ORM\Configuration::getAutoGenerateProxyClasses()`
- `Doctrine\ORM\Configuration::getProxyDir()`
- `Doctrine\ORM\Configuration::getProxyNamespace()`
- `Doctrine\ORM\Configuration::setAutoGenerateProxyClasses()`
- `Doctrine\ORM\Configuration::setProxyDir()`
- `Doctrine\ORM\Configuration::setProxyNamespace()`
- Passing more than one argument to `Doctrine\ORM\Proxy\ProxyFactory::__construct()`
Additionally, some methods of ORMSetup have been deprecated in favor of a new
counterpart.
- `Doctrine\ORM\ORMSetup::createAttributeMetadataConfiguration()` is deprecated in favor of
`Doctrine\ORM\ORMSetup::createAttributeMetadataConfig()`
- `Doctrine\ORM\ORMSetup::createXMLMetadataConfiguration()` is deprecated in favor of
`Doctrine\ORM\ORMSetup::createXMLMetadataConfig()`
- `Doctrine\ORM\ORMSetup::createConfiguration()` is deprecated in favor of
`Doctrine\ORM\ORMSetup::createConfig()`
## Deprecate methods for configuring no longer configurable features
Since 3.0, lazy ghosts are enabled unconditionally, and so is rejecting ID
collisions in the identity map.
As a consequence, the following methods are deprecated and will be removed in 4.0:
* `Doctrine\ORM\Configuration::setLazyGhostObjectEnabled()`
* `Doctrine\ORM\Configuration::isLazyGhostObjectEnabled()`
* `Doctrine\ORM\Configuration::setRejectIdCollisionInIdentityMap()`
* `Doctrine\ORM\Configuration::isRejectIdCollisionInIdentityMapEnabled()`
# Upgrade to 3.4.1
## BC BREAK: You can no longer use the `.*` notation to get all fields of an entity in a DTO
This feature was introduced in 3.4.0, and introduces several issues, so we
decide to remove it before it is used too widely.
# Upgrade to 3.4
See the General notes to upgrading to 3.x versions above.
## Discriminator Map class duplicates
Using the same class several times in a discriminator map is deprecated.
In 4.0, this will be an error.
## `Doctrine\ORM\Mapping\ClassMetadata::$reflFields` deprecated
To better support property hooks and lazy proxies in the future, `$reflFields` had to
be deprecated because we cannot use the PHP internal reflection API directly anymore.
The property was changed from an array to an object of type `LegacyReflectionFields`
that implements `ArrayAccess`.
Use the new `Doctrine\ORM\Mapping\PropertyAccessors\PropertyAccessor` API and access
through `Doctrine\ORM\Mapping\ClassMetadata::$propertyAccessors` instead.
Companion accessor methods are deprecated as well.
# Upgrade to 3.3
See the General notes to upgrading to 3.x versions above.
## Deprecate `DatabaseDriver`
The class `Doctrine\ORM\Mapping\Driver\DatabaseDriver` is deprecated without replacement.
## Add `Doctrine\ORM\Query\OutputWalker` interface, deprecate `Doctrine\ORM\Query\SqlWalker::getExecutor()`
Output walkers should implement the new `\Doctrine\ORM\Query\OutputWalker` interface and create
`Doctrine\ORM\Query\Exec\SqlFinalizer` instances instead of `Doctrine\ORM\Query\Exec\AbstractSqlExecutor`s.
The output walker must not base its workings on the query `firstResult`/`maxResult` values, so that the
`SqlFinalizer` can be kept in the query cache and used regardless of the actual `firstResult`/`maxResult` values.
Any operation dependent on `firstResult`/`maxResult` should take place within the `SqlFinalizer::createExecutor()`
method. Details can be found at https://github.com/doctrine/orm/pull/11188.
# Upgrade to 3.2
See the General notes to upgrading to 3.x versions above.
## Deprecate the `NotSupported` exception
The class `Doctrine\ORM\Exception\NotSupported` is deprecated without replacement.
## Deprecate remaining `Serializable` implementation
Relying on `SequenceGenerator` implementing the `Serializable` is deprecated
because that interface won't be implemented in ORM 4 anymore.
The following methods are deprecated:
* `SequenceGenerator::serialize()`
* `SequenceGenerator::unserialize()`
## `orm:schema-tool:update` option `--complete` is deprecated
That option behaves as a no-op, and is deprecated. It will be removed in 4.0.
## Deprecate properties `$indexes` and `$uniqueConstraints` of `Doctrine\ORM\Mapping\Table`
The properties `$indexes` and `$uniqueConstraints` have been deprecated since they had no effect at all.
The preferred way of defining indices and unique constraints is by
using the `\Doctrine\ORM\Mapping\UniqueConstraint` and `\Doctrine\ORM\Mapping\Index` attributes.
# Upgrade to 3.1
See the General notes to upgrading to 3.x versions above.
## Deprecate `Doctrine\ORM\Mapping\ReflectionEnumProperty`
This class is deprecated and will be removed in 4.0.
Instead, use `Doctrine\Persistence\Reflection\EnumReflectionProperty` from
`doctrine/persistence`.
## Deprecate passing null to `ClassMetadata::fullyQualifiedClassName()`
Passing `null` to `Doctrine\ORM\ClassMetadata::fullyQualifiedClassName()` is
deprecated and will no longer be possible in 4.0.
## Deprecate array access
Using array access on instances of the following classes is deprecated:
- `Doctrine\ORM\Mapping\DiscriminatorColumnMapping`
- `Doctrine\ORM\Mapping\EmbedClassMapping`
- `Doctrine\ORM\Mapping\FieldMapping`
- `Doctrine\ORM\Mapping\JoinColumnMapping`
- `Doctrine\ORM\Mapping\JoinTableMapping`
# Upgrade to 3.0
See the General notes to upgrading to 3.x versions above.
## BC BREAK: Calling `ClassMetadata::getAssociationMappedByTargetField()` with the owning side of an association now throws an exception
Previously, calling
`Doctrine\ORM\Mapping\ClassMetadata::getAssociationMappedByTargetField()` with
the owning side of an association returned `null`, which was undocumented, and
wrong according to the phpdoc of the parent method.
If you do not know whether you are on the owning or inverse side of an association,
you can use `Doctrine\ORM\Mapping\ClassMetadata::isAssociationInverseSide()`
to find out.
## BC BREAK: `Doctrine\ORM\Proxy\Autoloader` no longer extends `Doctrine\Common\Proxy\Autoloader`
Make sure to use the former when writing a type declaration or an `instanceof` check.
## Minor BC BREAK: Changed order of arguments passed to `OneToOne`, `ManyToOne` and `Index` mapping PHP attributes
To keep PHP mapping attributes consistent, order of arguments passed to above attributes has been changed
so `$targetEntity` is a first argument now. This change affects only non-named arguments usage.
## BC BREAK: AUTO keyword for identity generation defaults to IDENTITY for PostgreSQL when using `doctrine/dbal` 4
When using the `AUTO` strategy to let Doctrine determine the identity generation mechanism for
an entity, and when using `doctrine/dbal` 4, PostgreSQL now uses `IDENTITY`
instead of `SEQUENCE` or `SERIAL`.
There are three ways to handle this change.
* If you want to upgrade your existing tables to identity columns, you will need to follow [migration to identity columns on PostgreSQL](https://www.doctrine-project.org/projects/doctrine-dbal/en/4.0/how-to/postgresql-identity-migration.html)
* If you want to keep using SQL sequences, you need to configure the ORM this way:
```php
use Doctrine\DBAL\Platforms\PostgreSQLPlatform;
use Doctrine\ORM\Configuration;
use Doctrine\ORM\Mapping\ClassMetadata;
assert($configuration instanceof Configuration);
$configuration->setIdentityGenerationPreferences([
PostgreSQLPlatform::CLASS => ClassMetadata::GENERATOR_TYPE_SEQUENCE,
]);
```
* You can change individual entities to use the `SEQUENCE` strategy instead of `AUTO`:
```php
diff --git a/src/Entity/Example.php b/src/Entity/Example.php
index 28be8df378..3b7d61bda6 100644
--- a/src/Entity/Example.php
+++ b/src/Entity/Example.php
@@ -38,7 +38,7 @@ class Example
#[ORM\Id]
#[ORM\Column(type: 'integer')]
- #[ORM\GeneratedValue(strategy: 'AUTO')]
+ #[ORM\GeneratedValue(strategy: 'SEQUENCE')]
private int $id;
#[Assert\Length(max: 255)]
```
The later two options require a small database migration that will remove the default
expression fetching the next value from the sequence. It's not strictly necessary to
do this migration because the code will work anyway. A benefit of this approach is
that you can just make and roll out the code changes first and then migrate the database later.
## BC BREAK: Throw exceptions when using illegal attributes on Embeddable
There are only a few attributes allowed on an embeddable such as `#[Column]` or
`#[Embedded]`. Previously all others that target entity classes where ignored,
now they throw an exception.
## BC BREAK: Partial objects are removed
WARNING: This was relaxed in ORM 3.2 when partial was re-allowed for array-hydration.
- The `PARTIAL` keyword in DQL no longer exists (reintroduced in ORM 3.2)
- `Doctrine\ORM\Query\AST\PartialObjectExpression` is removed. (reintroduced in ORM 3.2)
- `Doctrine\ORM\Query\SqlWalker::HINT_PARTIAL` (reintroduced in ORM 3.2) and
`Doctrine\ORM\Query::HINT_FORCE_PARTIAL_LOAD` are removed.
- `Doctrine\ORM\EntityManager*::getPartialReference()` is removed.
## BC BREAK: Enforce ArrayCollection Type on `\Doctrine\ORM\QueryBuilder::setParameters(ArrayCollection $parameters)`
The argument $parameters can no longer be a key=>value array. Only ArrayCollection types are allowed.
### Before
```php
$qb = $em->createQueryBuilder()
->select('u')
->from('User', 'u')
->where('u.id = :user_id1 OR u.id = :user_id2')
->setParameters(array(
'user_id1' => 1,
'user_id2' => 2
));
```
### After
```php
$qb = $em->createQueryBuilder()
->select('u')
->from('User', 'u')
->where('u.id = :user_id1 OR u.id = :user_id2')
->setParameters(new ArrayCollection(array(
new Parameter('user_id1', 1),
new Parameter('user_id2', 2)
)));
```
## BC BREAK: `Doctrine\ORM\Persister\Entity\EntityPersister::executeInserts()` return type changed to `void`
Implementors should adapt to the new signature, and should call
`UnitOfWork::assignPostInsertId()` for each entry in the previously returned
array.
## BC BREAK: `Doctrine\ORM\Proxy\ProxyFactory` no longer extends abstract factory from `doctrine/common`
It is no longer possible to call methods, constants or properties inherited
from that class on a `ProxyFactory` instance.
`Doctrine\ORM\Proxy\ProxyFactory::createProxyDefinition()` and
`Doctrine\ORM\Proxy\ProxyFactory::resetUninitializedProxy()` are removed as well.
## BC BREAK: lazy ghosts are enabled unconditionally
`Doctrine\ORM\Configuration::setLazyGhostObjectEnabled()` and
`Doctrine\ORM\Configuration::isLazyGhostObjectEnabled()` are now no-ops and
will be deprecated in 3.1.0
## BC BREAK: collisions in identity map are unconditionally rejected
`Doctrine\ORM\Configuration::setRejectIdCollisionInIdentityMap()` and
`Doctrine\ORM\Configuration::isRejectIdCollisionInIdentityMapEnabled()` are now
no-ops and will be deprecated in 3.1.0.
## BC BREAK: Lifecycle callback mapping on embedded classes is now explicitly forbidden
Lifecycle callback mapping on embedded classes produced no effect, and is now
explicitly forbidden to point out mistakes.
## BC BREAK: The `NOTIFY` change tracking policy is removed
You should use `DEFERRED_EXPLICIT` instead.
## BC BREAK: `Mapping\Driver\XmlDriver::__construct()` third argument is now enabled by default
The third argument to
`Doctrine\ORM\Mapping\Driver\XmlDriver::__construct()` was introduced to
let users opt-in to XML validation, that is now always enabled by default.
As a consequence, the same goes for
`Doctrine\ORM\Mapping\Driver\SimplifiedXmlDriver`, and for
`Doctrine\ORM\ORMSetup::createXMLMetadataConfiguration()`.
## BC BREAK: `Mapping\Driver\AttributeDriver::__construct()` second argument is now a no-op
The second argument to
`Doctrine\ORM\Mapping\Driver\AttributeDriver::__construct()` was introduced to
let users opt-in to a new behavior, that is now always enforced, regardless of
the value of that argument.
## BC BREAK: `Query::setDQL()` and `Query::setFirstResult()` no longer accept `null`
The `$dqlQuery` argument of `Doctrine\ORM\Query::setDQL()` must always be a
string.
The `$firstResult` argument of `Doctrine\ORM\Query::setFirstResult()` must
always be an integer.
## BC BREAK: `orm:schema-tool:update` option `--complete` is now a no-op
`orm:schema-tool:update` now behaves as if `--complete` was provided,
regardless of whether it is provided or not.
## BC BREAK: Removed `Doctrine\ORM\Proxy\Proxy` interface.
Use `Doctrine\Persistence\Proxy` instead to check whether proxies are initialized.
## BC BREAK: Overriding fields or associations declared in other than mapped superclasses
As stated in the documentation, fields and associations may only be overridden when being inherited
from mapped superclasses. Overriding them for parent entity classes now throws a `MappingException`.
## BC BREAK: Undeclared entity inheritance now throws a `MappingException`
As soon as an entity class inherits from another entity class, inheritance has to
be declared by adding the appropriate configuration for the root entity.
## Removed `getEntityManager()` in `Doctrine\ORM\Event\OnClearEventArgs` and `Doctrine\ORM\Event\*FlushEventArgs`
Use `getObjectManager()` instead.
## BC BREAK: Removed `Doctrine\ORM\Mapping\ClassMetadataInfo` class
Use `Doctrine\ORM\Mapping\ClassMetadata` instead.
## BC BREAK: Removed `Doctrine\ORM\Event\LifecycleEventArgs` class.
Use one of the dedicated event classes instead:
* `Doctrine\ORM\Event\PrePersistEventArgs`
* `Doctrine\ORM\Event\PreUpdateEventArgs`
* `Doctrine\ORM\Event\PreRemoveEventArgs`
* `Doctrine\ORM\Event\PostPersistEventArgs`
* `Doctrine\ORM\Event\PostUpdateEventArgs`
* `Doctrine\ORM\Event\PostRemoveEventArgs`
* `Doctrine\ORM\Event\PostLoadEventArgs`
## BC BREAK: Removed `AttributeDriver::$entityAnnotationClasses` and `AttributeDriver::getReader()`
* If you need to change the behavior of `AttributeDriver::isTransient()`,
override that method instead.
* The attribute reader is internal to the driver and should not be accessed from outside.
## BC BREAK: Removed `Doctrine\ORM\Query\AST\InExpression`
The AST parser will create a `InListExpression` or a `InSubselectExpression` when
encountering an `IN ()` DQL expression instead of a generic `InExpression`.
As a consequence, `SqlWalker::walkInExpression()` has been replaced by
`SqlWalker::walkInListExpression()` and `SqlWalker::walkInSubselectExpression()`.
## BC BREAK: Changed `EntityManagerInterface#refresh($entity)`, `EntityManagerDecorator#refresh($entity)` and `UnitOfWork#refresh($entity)` signatures
The new signatures of these methods add an optional `LockMode|int|null $lockMode`
param with default `null` value (no lock).
## BC Break: Removed AnnotationDriver
The annotation driver and anything related to annotation has been removed.
Please migrate to another mapping driver.
The `Doctrine\ORM\Mapping\Annotation` maker interface has been removed in favor of the new
`Doctrine\ORM\Mapping\MappingAttribute` interface.
## BC BREAK: Removed `EntityManager::create()`
The constructor of `EntityManager` is now public and must be used instead of the `create()` method.
However, the constructor expects a `Connection` while `create()` accepted an array with connection parameters.
You can pass that array to DBAL's `Doctrine\DBAL\DriverManager::getConnection()` method to bootstrap the
connection.
## BC BREAK: Removed `QueryBuilder` methods and constants.
The following `QueryBuilder` constants and methods have been removed:
1. `SELECT`,
2. `DELETE`,
3. `UPDATE`,
4. `STATE_DIRTY`,
5. `STATE_CLEAN`,
6. `getState()`,
7. `getType()`.
## BC BREAK: Omitting only the alias argument for `QueryBuilder::update` and `QueryBuilder::delete` is not supported anymore
When building an UPDATE or DELETE query and when passing a class/type to the function, the alias argument must not be omitted.
### Before
```php
$qb = $em->createQueryBuilder()
->delete('User u')
->where('u.id = :user_id')
->setParameter('user_id', 1);
```
### After
```php
$qb = $em->createQueryBuilder()
->delete('User', 'u')
->where('u.id = :user_id')
->setParameter('user_id', 1);
```
## BC BREAK: Split output walkers and tree walkers
`SqlWalker` and its child classes don't implement the `TreeWalker` interface
anymore.
The following methods have been removed from the `TreeWalker` interface and
from the `TreeWalkerAdapter` and `TreeWalkerChain` classes:
* `setQueryComponent()`
* `walkSelectClause()`
* `walkFromClause()`
* `walkFunction()`
* `walkOrderByClause()`
* `walkOrderByItem()`
* `walkHavingClause()`
* `walkJoin()`
* `walkSelectExpression()`
* `walkQuantifiedExpression()`
* `walkSubselect()`
* `walkSubselectFromClause()`
* `walkSimpleSelectClause()`
* `walkSimpleSelectExpression()`
* `walkAggregateExpression()`
* `walkGroupByClause()`
* `walkGroupByItem()`
* `walkDeleteClause()`
* `walkUpdateClause()`
* `walkUpdateItem()`
* `walkWhereClause()`
* `walkConditionalExpression()`
* `walkConditionalTerm()`
* `walkConditionalFactor()`
* `walkConditionalPrimary()`
* `walkExistsExpression()`
* `walkCollectionMemberExpression()`
* `walkEmptyCollectionComparisonExpression()`
* `walkNullComparisonExpression()`
* `walkInExpression()`
* `walkInstanceOfExpression()`
* `walkLiteral()`
* `walkBetweenExpression()`
* `walkLikeExpression()`
* `walkStateFieldPathExpression()`
* `walkComparisonExpression()`
* `walkInputParameter()`
* `walkArithmeticExpression()`
* `walkArithmeticTerm()`
* `walkStringPrimary()`
* `walkArithmeticFactor()`
* `walkSimpleArithmeticExpression()`
* `walkPathExpression()`
* `walkResultVariable()`
* `getExecutor()`
The following changes have been made to the abstract `TreeWalkerAdapter` class:
* The method `setQueryComponent()` is now protected.
* The method `_getQueryComponents()` has been removed in favor of
`getQueryComponents()`.
## BC BREAK: Removed identity columns emulation through sequences
If the platform you are using does not support identity columns, you should
switch to the `SEQUENCE` strategy.
## BC BREAK: Made setters parameters mandatory
The following methods require an argument when being called. Pass `null`
instead of omitting the argument.
* `Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs::setFoundMetadata()`
* `Doctrine\ORM\AbstractQuery::setHydrationCacheProfile()`
* `Doctrine\ORM\AbstractQuery::setResultCache()`
* `Doctrine\ORM\AbstractQuery::setResultCacheProfile()`
## BC BREAK: New argument to `NamingStrategy::joinColumnName()`
### Before
```php
<?php
class MyStrategy implements NamingStrategy
{
/**
* @param string $propertyName A property name.
*/
public function joinColumnName($propertyName): string
{
// …
}
}
```
### After
The `class-string` type for `$className` can be inherited from the signature of
the interface.
```php
<?php
class MyStrategy implements NamingStrategy
{
/**
* {@inheritdoc}
*/
public function joinColumnName(string $propertyName, string $className): string
{
// …
}
}
```
## BC BREAK: Remove `StaticPHPDriver` and `DriverChain`
Use `Doctrine\Persistence\Mapping\Driver\StaticPHPDriver` and
`Doctrine\Persistence\Mapping\Driver\MappingDriverChain` from
`doctrine/persistence` instead.
## BC BREAK: `UnderscoreNamingStrategy` is number aware only
The second argument to `UnderscoreNamingStrategy::__construct()` was dropped,
the strategy can no longer be unaware of numbers.
## BC BREAK: Remove `Doctrine\ORM\Tools\DisconnectedClassMetadataFactory`
No replacement is provided.
## BC BREAK: Remove support for `Type::canRequireSQLConversion()`
This feature was deprecated in DBAL 3.3.0 and will be removed in DBAL 4.0.
The value conversion methods are now called regardless of the type.
The `MappingException::sqlConversionNotAllowedForIdentifiers()` method has been removed
as no longer relevant.
## BC Break: Removed the `doctrine` binary.
The documentation explains how the console tools can be bootstrapped for
standalone usage:
https://www.doctrine-project.org/projects/doctrine-orm/en/stable/reference/tools.html
The method `ConsoleRunner::printCliConfigTemplate()` has been removed as well
because it was only useful in the context of the `doctrine` binary.
## BC Break: Removed `EntityManagerHelper` and related logic
All console commands require a `$entityManagerProvider` to be passed via the
constructor. Commands won't try to get the entity manager from a previously
registered `em` console helper.
The following classes have been removed:
* `Doctrine\ORM\Tools\Console\EntityManagerProvider\HelperSetManagerProvider`
* `Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper`
The following breaking changes have been applied to `Doctrine\ORM\Tools\Console\ConsoleRunner`:
* The method `createHelperSet()` has been removed.
* The methods `run()` and `createApplication()` don't accept an instance of
`HelperSet` as first argument anymore.
* The method `addCommands()` requires an instance of `EntityManagerProvider`
as second argument now.
## BC Break: `Exception\ORMException` is no longer a class, but an interface
All methods in `Doctrine\ORM\ORMException` have been extracted to dedicated exceptions.
* `missingMappingDriverImpl()` => `Exception\MissingMappingDriverImplementation::create()`
* `unrecognizedField()` => `Persisters\Exception\UnrecognizedField::byName()`
* `unexpectedAssociationValue()` => `Exception\UnexpectedAssociationValue::create()`
* `invalidOrientation()` => `Persisters\Exception\InvalidOrientation::fromClassNameAndField()`
* `entityManagerClosed()` => `Exception\EntityManagerClosed::create()`
* `invalidHydrationMode()` => `Exception\InvalidHydrationMode::fromMode()`
* `mismatchedEventManager()` => `Exception\MismatchedEventManager::create()`
* `findByRequiresParameter()` => `Repository\Exception\InvalidMagicMethodCall::onMissingParameter()`
* `invalidMagicCall()` => `Repository\Exception\InvalidMagicMethodCall::becauseFieldNotFoundIn()`
* `invalidFindByInverseAssociation()` => `Repository\Exception\InvalidFindByCall::fromInverseSideUsage()`
* `invalidResultCacheDriver()` => `Cache\Exception\InvalidResultCacheDriver::create()`
* `notSupported()` => `Exception\NotSupported::create()`
* `queryCacheNotConfigured()` => `QueryCacheNotConfigured::create()`
* `metadataCacheNotConfigured()` => `Cache\Exception\MetadataCacheNotConfigured::create()`
* `queryCacheUsesNonPersistentCache()` => `Cache\Exception\QueryCacheUsesNonPersistentCache::fromDriver()`
* `metadataCacheUsesNonPersistentCache()` => `Cache\Exception\MetadataCacheUsesNonPersistentCache::fromDriver()`
* `proxyClassesAlwaysRegenerating()` => `Exception\ProxyClassesAlwaysRegenerating::create()`
* `invalidEntityRepository()` => `Exception\InvalidEntityRepository::fromClassName()`
* `missingIdentifierField()` => `Exception\MissingIdentifierField::fromFieldAndClass()`
* `unrecognizedIdentifierFields()` => `Exception\UnrecognizedIdentifierFields::fromClassAndFieldNames()`
* `cantUseInOperatorOnCompositeKeys()` => `Persisters\Exception\CantUseInOperatorOnCompositeKeys::create()`
## BC Break: `CacheException` is no longer a class, but an interface
All methods in `Doctrine\ORM\Cache\CacheException` have been extracted to dedicated exceptions.
* `updateReadOnlyCollection()` => `Cache\Exception\CannotUpdateReadOnlyCollection::fromEntityAndField()`
* `updateReadOnlyEntity()` => `Cache\Exception\CannotUpdateReadOnlyEntity::fromEntity()`
* `nonCacheableEntity()` => `Cache\Exception\NonCacheableEntity::fromEntity()`
* `nonCacheableEntityAssociation()` => `Cache\Exception\NonCacheableEntityAssociation::fromEntityAndField()`
## BC Break: Missing type declaration added for identifier generators
Although undocumented, it was possible to configure a custom repository
class that implements `ObjectRepository` but does not extend the
`EntityRepository` base class. Repository classes have to extend
`EntityRepository` now.
## BC BREAK: Removed support for entity namespace alias
- `EntityManager::getRepository()` no longer accepts the entity namespace alias
notation.
- `Configuration::addEntityNamespace()` and
`Configuration::getEntityNamespace()` have been removed.
## BC BREAK: Remove helper methods from `AbstractCollectionPersister`
The following protected methods of
`Doctrine\ORM\Cache\Persister\Collection\AbstractCollectionPersister`
have been removed.
* `evictCollectionCache()`
* `evictElementCache()`
## BC BREAK: `Doctrine\ORM\Query\TreeWalkerChainIterator`
This class has been removed without replacement.
## BC BREAK: Remove quoting methods from `ClassMetadata`
The following methods have been removed from the class metadata because
quoting is handled by implementations of `Doctrine\ORM\Mapping\QuoteStrategy`:
* `getQuotedIdentifierColumnNames()`
* `getQuotedColumnName()`
* `getQuotedTableName()`
* `getQuotedJoinTableName()`
## BC BREAK: Remove ability to merge detached entities
Merge semantics was a poor fit for the PHP "share-nothing" architecture.
In addition to that, merging caused multiple issues with data integrity
in the managed entity graph, which was constantly spawning more edge-case
bugs/scenarios.
The method `UnitOfWork::merge()` has been removed. The method
`EntityManager::merge()` will throw an exception on each call.
## BC BREAK: Removed ability to partially flush/commit entity manager and unit of work
The following methods don't accept a single entity or an array of entities anymore:
* `Doctrine\ORM\EntityManager::flush()`
* `Doctrine\ORM\Decorator\EntityManagerDecorator::flush()`
* `Doctrine\ORM\UnitOfWork::commit()`
The semantics of `flush()` and `commit()` will remain the same, but the change
tracking will be performed on all entities managed by the unit of work, and not
just on the provided entities, as the parameter is now completely ignored.
## BC BREAK: Removed ability to partially clear entity manager and unit of work
* Passing an argument other than `null` to `EntityManager::clear()` will raise
an exception.
* The unit of work cannot be cleared partially anymore. Passing an argument to
`UnitOfWork::clear()` does not have any effect anymore; the unit of work is
cleared completely.
* The method `EntityRepository::clear()` has been removed.
* The methods `getEntityClass()` and `clearsAllEntities()` have been removed
from `OnClearEventArgs`.
## BC BREAK: Remove support for Doctrine Cache
The Doctrine Cache library is not supported anymore. The following methods
have been removed from `Doctrine\ORM\Configuration`:
* `getQueryCacheImpl()`
* `setQueryCacheImpl()`
* `getHydrationCacheImpl()`
* `setHydrationCacheImpl()`
* `getMetadataCacheImpl()`
* `setMetadataCacheImpl()`
The methods have been replaced by PSR-6 compatible counterparts
(just strip the `Impl` suffix from the old name to get the new one).
## BC BREAK: Remove `Doctrine\ORM\Configuration::newDefaultAnnotationDriver`
This functionality has been moved to the new `ORMSetup` class. Call
`Doctrine\ORM\ORMSetup::createDefaultAnnotationDriver()` to create
a new annotation driver.
## BC BREAK: Remove `Doctrine\ORM\Tools\Setup`
In our effort to migrate from Doctrine Cache to PSR-6, the `Setup` class which
accepted a Doctrine Cache instance in each method has been removed.
The replacement is `Doctrine\ORM\ORMSetup` which accepts a PSR-6
cache instead.
## BC BREAK: Removed named queries
All APIs related to named queries have been removed.
## BC BREAK: Remove old cache accessors and mutators from query classes
The following methods have been removed from `AbstractQuery`:
* `setResultCacheDriver()`
* `getResultCacheDriver()`
* `useResultCache()`
* `getResultCacheLifetime()`
* `getResultCacheId()`
The following methods have been removed from `Query`:
* `setQueryCacheDriver()`
* `getQueryCacheDriver()`
## BC BREAK: Remove `Doctrine\ORM\Cache\MultiGetRegion`
The interface has been merged into `Doctrine\ORM\Cache\Region`.
## BC BREAK: Rename `AbstractIdGenerator::generate()` to `generateId()`
* Implementations of `AbstractIdGenerator` have to implement the method
`generateId()`.
* The method `generate()` has been removed from `AbstractIdGenerator`.
## BC BREAK: Remove cache settings inspection
Doctrine does not provide its own cache implementation anymore and relies on
the PSR-6 standard instead. As a consequence, we cannot determine anymore
whether a given cache adapter is suitable for a production environment.
Because of that, functionality that aims to do so has been removed:
* `Configuration::ensureProductionSettings()`
* the `orm:ensure-production-settings` console command
## BC BREAK: PSR-6-based second level cache
The second level cache has been reworked to consume a PSR-6 cache. Using a
Doctrine Cache instance is not supported anymore.
* `DefaultCacheFactory`: The constructor expects a PSR-6 cache item pool as
second argument now.
* `DefaultMultiGetRegion`: This class has been removed.
* `DefaultRegion`:
* The constructor expects a PSR-6 cache item pool as second argument now.
* The protected `$cache` property is removed.
* The properties `$name` and `$lifetime` as well as the constant
`REGION_KEY_SEPARATOR` and the method `getCacheEntryKey()` are
`private` now.
* The method `getCache()` has been removed.
## BC Break: Remove `Doctrine\ORM\Mapping\Driver\PHPDriver`
Use `StaticPHPDriver` instead when you want to programmatically configure
entity metadata.
## BC BREAK: Remove `Doctrine\ORM\EntityManagerInterface#transactional()`
This method has been replaced by `Doctrine\ORM\EntityManagerInterface#wrapInTransaction()`.
## BC BREAK: Removed support for schema emulation.
The ORM no longer attempts to emulate schemas on SQLite.
## BC BREAK: Remove `Setup::registerAutoloadDirectory()`
Use Composer's autoloader instead.
## BC BREAK: Remove YAML mapping drivers.
If your code relies on `YamlDriver` or `SimpleYamlDriver`, you **MUST** migrate to
attribute, annotation or XML drivers instead.
You can use the `orm:convert-mapping` command to convert your metadata mapping to XML
_before_ upgrading to 3.0:
```sh
php doctrine orm:convert-mapping xml /path/to/mapping-path-converted-to-xml
```
## BC BREAK: Remove code generators and related console commands
These console commands have been removed:
* `orm:convert-d1-schema`
* `orm:convert-mapping`
* `orm:generate:entities`
* `orm:generate-repositories`
These classes have been deprecated:
* `Doctrine\ORM\Tools\ConvertDoctrine1Schema`
* `Doctrine\ORM\Tools\EntityGenerator`
* `Doctrine\ORM\Tools\EntityRepositoryGenerator`
The entire `Doctrine\ORM\Tools\Export` namespace has been removed as well.
## BC BREAK: Removed `Doctrine\ORM\Version`
Use Composer's runtime API if you _really_ need to check the version of the ORM package at runtime.
## BC BREAK: EntityRepository::count() signature change
The argument `$criteria` of `Doctrine\ORM\EntityRepository::count()` is now
optional. Overrides in child classes should be made compatible.
## BC BREAK: changes in exception hierarchy
- `Doctrine\ORM\ORMException` has been removed
- `Doctrine\ORM\Exception\ORMException` is now an interface
## Variadic methods now use native variadics
The following methods were using `func_get_args()` to simulate a variadic argument:
- `Doctrine\ORM\Query\Expr#andX()`
- `Doctrine\ORM\Query\Expr#orX()`
- `Doctrine\ORM\QueryBuilder#select()`
- `Doctrine\ORM\QueryBuilder#addSelect()`
- `Doctrine\ORM\QueryBuilder#where()`
- `Doctrine\ORM\QueryBuilder#andWhere()`
- `Doctrine\ORM\QueryBuilder#orWhere()`
- `Doctrine\ORM\QueryBuilder#groupBy()`
- `Doctrine\ORM\QueryBuilder#andGroupBy()`
- `Doctrine\ORM\QueryBuilder#having()`
- `Doctrine\ORM\QueryBuilder#andHaving()`
- `Doctrine\ORM\QueryBuilder#orHaving()`
A variadic argument is now actually used in their signatures signature (`...$x`).
Signatures of overridden methods should be changed accordingly
## Minor BC BREAK: removed `Doctrine\ORM\EntityManagerInterface#copy()`
Method `Doctrine\ORM\EntityManagerInterface#copy()` never got its implementation and is removed in 3.0.
## BC BREAK: Removed classes related to UUID and TABLE generator strategies
The following classes have been removed:
- `Doctrine\ORM\Id\TableGenerator`
- `Doctrine\ORM\Id\UuidGenerator`
Using the `UUID` strategy for generating identifiers is not supported anymore.
## BC BREAK: Removed `Query::iterate()`
The deprecated method `Query::iterate()` has been removed along with the
following classes and methods:
- `AbstractHydrator::iterate()`
- `AbstractHydrator::hydrateRow()`
- `IterableResult`
Use `toIterable()` instead.
# Upgrade to 2.20
## Add `Doctrine\ORM\Query\OutputWalker` interface, deprecate `Doctrine\ORM\Query\SqlWalker::getExecutor()`
Output walkers should implement the new `\Doctrine\ORM\Query\OutputWalker` interface and create
`Doctrine\ORM\Query\Exec\SqlFinalizer` instances instead of `Doctrine\ORM\Query\Exec\AbstractSqlExecutor`s.
The output walker must not base its workings on the query `firstResult`/`maxResult` values, so that the
`SqlFinalizer` can be kept in the query cache and used regardless of the actual `firstResult`/`maxResult` values.
Any operation dependent on `firstResult`/`maxResult` should take place within the `SqlFinalizer::createExecutor()`
method. Details can be found at https://github.com/doctrine/orm/pull/11188.
## Explictly forbid property hooks
Property hooks are not supported yet by Doctrine ORM. Until support is added,
they are explicitly forbidden because the support would result in a breaking
change in behavior.
Progress on this is tracked at https://github.com/doctrine/orm/issues/11624 .
## PARTIAL DQL syntax is undeprecated
Use of the PARTIAL keyword is not deprecated anymore in DQL, because we will be
able to support PARTIAL objects with PHP 8.4 Lazy Objects and
Symfony/VarExporter in a better way. When we decided to remove this feature
these two abstractions did not exist yet.
WARNING: If you want to upgrade to 3.x and still use PARTIAL keyword in DQL
with array or object hydrators, then you have to directly migrate to ORM 3.3.x or higher.
PARTIAL keyword in DQL is not available in 3.0, 3.1 and 3.2 of ORM.
## Deprecate `\Doctrine\ORM\Query\Parser::setCustomOutputTreeWalker()`
Use the `\Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER` query hint to set the output walker
class instead of setting it through the `\Doctrine\ORM\Query\Parser::setCustomOutputTreeWalker()` method
on the parser instance.
# Upgrade to 2.19
## Deprecate calling `ClassMetadata::getAssociationMappedByTargetField()` with the owning side of an association
Calling
`Doctrine\ORM\Mapping\ClassMetadata::getAssociationMappedByTargetField()` with
the owning side of an association returns `null`, which is undocumented, and
wrong according to the phpdoc of the parent method.
If you do not know whether you are on the owning or inverse side of an association,
you can use `Doctrine\ORM\Mapping\ClassMetadata::isAssociationInverseSide()`
to find out.
## Deprecate `Doctrine\ORM\Query\Lexer::T_*` constants
Use `Doctrine\ORM\Query\TokenType::T_*` instead.
# Upgrade to 2.17
## Deprecate annotations classes for named queries
The following classes have been deprecated:
* `Doctrine\ORM\Mapping\NamedNativeQueries`
* `Doctrine\ORM\Mapping\NamedNativeQuery`
* `Doctrine\ORM\Mapping\NamedQueries`
* `Doctrine\ORM\Mapping\NamedQuery`
## Deprecate `Doctrine\ORM\Query\Exec\AbstractSqlExecutor::_sqlStatements`
Use `Doctrine\ORM\Query\Exec\AbstractSqlExecutor::sqlStatements` instead.
## Undeprecate `Doctrine\ORM\Proxy\Autoloader`
It will be a full-fledged class, no longer extending
`Doctrine\Common\Proxy\Autoloader` in 3.0.x.
## Deprecated: reliance on the non-optimal defaults that come with the `AUTO` identifier generation strategy
When the `AUTO` identifier generation strategy was introduced, the best
strategy at the time was selected for each database platform.
A lot of time has passed since then, and with ORM 3.0.0 and DBAL 4.0.0, support
for better strategies will be added.
Because of that, it is now deprecated to rely on the historical defaults when
they differ from what we will be recommended in the future.
Instead, you should pick a strategy for each database platform you use, and it
will be used when using `AUTO`. As of now, only PostgreSQL is affected by this.
It is recommended that PostgreSQL users configure their existing and new
applications to use `SEQUENCE` until `doctrine/dbal` 4.0.0 is released:
```php
use Doctrine\DBAL\Platforms\PostgreSQLPlatform;
use Doctrine\ORM\Configuration;
assert($configuration instanceof Configuration);
$configuration->setIdentityGenerationPreferences([
PostgreSQLPlatform::CLASS => ClassMetadata::GENERATOR_TYPE_SEQUENCE,
]);
```
When DBAL 4 is released, `AUTO` will result in `IDENTITY`, and the above
configuration should be removed to migrate to it.
## Deprecate `EntityManagerInterface::getPartialReference()`
This method does not have a replacement and will be removed in 3.0.
## Deprecate not-enabling lazy-ghosts
Not enabling lazy ghost objects is deprecated. In ORM 3.0, they will be always enabled.
Ensure `Doctrine\ORM\Configuration::setLazyGhostObjectEnabled(true)` is called to enable them.
# Upgrade to 2.16
## Deprecated accepting duplicate IDs in the identity map
For any given entity class and ID value, there should be only one object instance
representing the entity.
In https://github.com/doctrine/orm/pull/10785, a check was added that will guard this
in the identity map. The most probable cause for violations of this rule are collisions
of application-provided IDs.
In ORM 2.16.0, the check was added by throwing an exception. In ORM 2.16.1, this will be
changed to a deprecation notice. ORM 3.0 will make it an exception again. Use
`\Doctrine\ORM\Configuration::setRejectIdCollisionInIdentityMap()` if you want to opt-in
to the new mode.
## Potential changes to the order in which `INSERT`s are executed
In https://github.com/doctrine/orm/pull/10547, the commit order computation was improved
to fix a series of bugs where a correct (working) commit order was previously not found.
Also, the new computation may get away with fewer queries being executed: By inserting
referred-to entities first and using their ID values for foreign key fields in subsequent
`INSERT` statements, additional `UPDATE` statements that were previously necessary can be
avoided.
When using database-provided, auto-incrementing IDs, this may lead to IDs being assigned
to entities in a different order than it was previously the case.
## Deprecated returning post insert IDs from `EntityPersister::executeInserts()`
Persisters implementing `\Doctrine\ORM\Persisters\Entity\EntityPersister` should no longer
return an array of post insert IDs from their `::executeInserts()` method. Make the
persister call `Doctrine\ORM\UnitOfWork::assignPostInsertId()` instead.
## Changing the way how reflection-based mapping drivers report fields, deprecated the "old" mode
In ORM 3.0, a change will be made regarding how the `AttributeDriver` reports field mappings.
This change is necessary to be able to detect (and reject) some invalid mapping configurations.
To avoid surprises during 2.x upgrades, the new mode is opt-in. It can be activated on the
`AttributeDriver` and `AnnotationDriver` by setting the `$reportFieldsWhereDeclared`
constructor parameter to `true`. It will cause `MappingException`s to be thrown when invalid
configurations are detected.
Not enabling the new mode will cause a deprecation notice to be raised. In ORM 3.0,
only the new mode will be available.
# Upgrade to 2.15
## Deprecated configuring `JoinColumn` on the inverse side of one-to-one associations
For one-to-one associations, the side using the `mappedBy` attribute is the inverse side.
The owning side is the entity with the table containing the foreign key. Using `JoinColumn`
configuration on the _inverse_ side now triggers a deprecation notice and will be an error
in 3.0.
## Deprecated overriding fields or associations not declared in mapped superclasses
As stated in the documentation, fields and associations may only be overridden when being inherited
from mapped superclasses. Overriding them for parent entity classes now triggers a deprecation notice
and will be an error in 3.0.
## Deprecated undeclared entity inheritance
As soon as an entity class inherits from another entity class, inheritance has to
be declared by adding the appropriate configuration for the root entity.
## Deprecated stubs for "concrete table inheritance"
This third way of mapping class inheritance was never implemented. Code stubs are
now deprecated and will be removed in 3.0.
* `\Doctrine\ORM\Mapping\ClassMetadataInfo::INHERITANCE_TYPE_TABLE_PER_CLASS` constant
* `\Doctrine\ORM\Mapping\ClassMetadataInfo::isInheritanceTypeTablePerClass()` method
* Using `TABLE_PER_CLASS` as the value for the `InheritanceType` attribute or annotation
or in XML configuration files.
# Upgrade to 2.14
## Deprecated `Doctrine\ORM\Persisters\Exception\UnrecognizedField::byName($field)` method.
Use `Doctrine\ORM\Persisters\Exception\UnrecognizedField::byFullyQualifiedName($className, $field)` instead.
## Deprecated constants of `Doctrine\ORM\Internal\CommitOrderCalculator`
The following public constants have been deprecated:
* `CommitOrderCalculator::NOT_VISITED`
* `CommitOrderCalculator::IN_PROGRESS`
* `CommitOrderCalculator::VISITED`
These constants were used for internal purposes. Relying on them is discouraged.
## Deprecated `Doctrine\ORM\Query\AST\InExpression`
The AST parser will create a `InListExpression` or a `InSubselectExpression` when
encountering an `IN ()` DQL expression instead of a generic `InExpression`.
As a consequence, `SqlWalker::walkInExpression()` has been deprecated in favor of
`SqlWalker::walkInListExpression()` and `SqlWalker::walkInSubselectExpression()`.
## Deprecated constructing a `CacheKey` without `$hash`
The `Doctrine\ORM\Cache\CacheKey` class has an explicit constructor now with
an optional parameter `$hash`. That parameter will become mandatory in 3.0.
## Deprecated `AttributeDriver::$entityAnnotationClasses`
If you need to change the behavior of `AttributeDriver::isTransient()`,
override that method instead.
## Deprecated incomplete schema updates
Using `orm:schema-tool:update` without passing the `--complete` flag is
deprecated. Use schema asset filtering if you need to preserve assets not
managed by DBAL.
Likewise, calling `SchemaTool::updateSchema()` or
`SchemaTool::getUpdateSchemaSql()` with a second argument is deprecated.
## Deprecated annotation mapping driver.
Please switch to one of the other mapping drivers. Native attributes which PHP
supports since version 8.0 are probably your best option.
As a consequence, the following methods are deprecated:
- `ORMSetup::createAnnotationMetadataConfiguration`
- `ORMSetup::createDefaultAnnotationDriver`
The marker interface `Doctrine\ORM\Mapping\Annotation` is deprecated as well.
All annotation/attribute classes implement
`Doctrine\ORM\Mapping\MappingAttribute` now.
## Deprecated `Doctrine\ORM\Proxy\Proxy` interface.
Use `Doctrine\Persistence\Proxy` instead to check whether proxies are initialized.
## Deprecated `Doctrine\ORM\Event\LifecycleEventArgs` class.
It will be removed in 3.0. Use one of the dedicated event classes instead:
* `Doctrine\ORM\Event\PrePersistEventArgs`
* `Doctrine\ORM\Event\PreUpdateEventArgs`
* `Doctrine\ORM\Event\PreRemoveEventArgs`
* `Doctrine\ORM\Event\PostPersistEventArgs`
* `Doctrine\ORM\Event\PostUpdateEventArgs`
* `Doctrine\ORM\Event\PostRemoveEventArgs`
* `Doctrine\ORM\Event\PostLoadEventArgs`
# Upgrade to 2.13
## Deprecated `EntityManager::create()`
The constructor of `EntityManager` is now public and should be used instead of the `create()` method.
However, the constructor expects a `Connection` while `create()` accepted an array with connection parameters.
You can pass that array to DBAL's `Doctrine\DBAL\DriverManager::getConnection()` method to bootstrap the
connection.
## Deprecated `QueryBuilder` methods and constants.
1. The `QueryBuilder::getState()` method has been deprecated as the builder state is an internal concern.
2. Relying on the type of the query being built by using `QueryBuilder::getType()` has been deprecated.
If necessary, track the type of the query being built outside of the builder.
The following `QueryBuilder` constants related to the above methods have been deprecated:
1. `SELECT`,
2. `DELETE`,
3. `UPDATE`,
4. `STATE_DIRTY`,
5. `STATE_CLEAN`.
## Deprecated omitting only the alias argument for `QueryBuilder::update` and `QueryBuilder::delete`
When building an UPDATE or DELETE query and when passing a class/type to the function, the alias argument must not be omitted.
### Before
```php
$qb = $em->createQueryBuilder()
->delete('User u')
->where('u.id = :user_id')
->setParameter('user_id', 1);
```
### After
```php
$qb = $em->createQueryBuilder()
->delete('User', 'u')
->where('u.id = :user_id')
->setParameter('user_id', 1);
```
## Deprecated using the `IDENTITY` identifier strategy on platform that do not support identity columns
If identity columns are emulated with sequences on the platform you are using,
you should switch to the `SEQUENCE` strategy.
## Deprecated passing `null` to `Doctrine\ORM\Query::setFirstResult()`
`$query->setFirstResult(null);` is equivalent to `$query->setFirstResult(0)`.
## Deprecated calling setters without arguments
The following methods will require an argument in 3.0. Pass `null` instead of
omitting the argument.
* `Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs::setFoundMetadata()`
* `Doctrine\ORM\AbstractQuery::setHydrationCacheProfile()`
* `Doctrine\ORM\AbstractQuery::setResultCache()`
* `Doctrine\ORM\AbstractQuery::setResultCacheProfile()`
## Deprecated passing invalid fetch modes to `AbstractQuery::setFetchMode()`
Calling `AbstractQuery::setFetchMode()` with anything else than
`Doctrine\ORM\Mapping::FETCH_EAGER` results in
`Doctrine\ORM\Mapping::FETCH_LAZY` being used. Relying on that behavior is
deprecated and will result in an exception in 3.0.
## Deprecated `getEntityManager()` in `Doctrine\ORM\Event\OnClearEventArgs` and `Doctrine\ORM\Event\*FlushEventArgs`
This method has been deprecated in:
* `Doctrine\ORM\Event\OnClearEventArgs`
* `Doctrine\ORM\Event\OnFlushEventArgs`
* `Doctrine\ORM\Event\PostFlushEventArgs`
* `Doctrine\ORM\Event\PreFlushEventArgs`
It will be removed in 3.0. Use `getObjectManager()` instead.
## Prepare split of output walkers and tree walkers
In 3.0, `SqlWalker` and its child classes won't implement the `TreeWalker`
interface anymore. Relying on that inheritance is deprecated.
The following methods of the `TreeWalker` interface have been deprecated:
* `setQueryComponent()`
* `walkSelectClause()`
* `walkFromClause()`
* `walkFunction()`
* `walkOrderByClause()`
* `walkOrderByItem()`
* `walkHavingClause()`
* `walkJoin()`
* `walkSelectExpression()`
* `walkQuantifiedExpression()`
* `walkSubselect()`
* `walkSubselectFromClause()`
* `walkSimpleSelectClause()`
* `walkSimpleSelectExpression()`
* `walkAggregateExpression()`
* `walkGroupByClause()`
* `walkGroupByItem()`
* `walkDeleteClause()`
* `walkUpdateClause()`
* `walkUpdateItem()`
* `walkWhereClause()`
* `walkConditionalExpression()`
* `walkConditionalTerm()`
* `walkConditionalFactor()`
* `walkConditionalPrimary()`
* `walkExistsExpression()`
* `walkCollectionMemberExpression()`
* `walkEmptyCollectionComparisonExpression()`
* `walkNullComparisonExpression()`
* `walkInExpression()`
* `walkInstanceOfExpression()`
* `walkLiteral()`
* `walkBetweenExpression()`
* `walkLikeExpression()`
* `walkStateFieldPathExpression()`
* `walkComparisonExpression()`
* `walkInputParameter()`
* `walkArithmeticExpression()`
* `walkArithmeticTerm()`
* `walkStringPrimary()`
* `walkArithmeticFactor()`
* `walkSimpleArithmeticExpression()`
* `walkPathExpression()`
* `walkResultVariable()`
* `getExecutor()`
The following changes have been made to the abstract `TreeWalkerAdapter` class:
* All implementations of now-deprecated `TreeWalker` methods have been
deprecated as well.
* The method `setQueryComponent()` will become protected in 3.0. Calling it
publicly is deprecated.
* The method `_getQueryComponents()` is deprecated, call `getQueryComponents()`
instead.
On the `TreeWalkerChain` class, all implementations of now-deprecated
`TreeWalker` methods have been deprecated as well. However, `SqlWalker` is
unaffected by those deprecations and will continue to implement all of those
methods.
## Deprecated passing `null` to `Doctrine\ORM\Query::setDQL()`
Doing `$query->setDQL(null);` achieves nothing.
## Deprecated omitting second argument to `NamingStrategy::joinColumnName`
When implementing `NamingStrategy`, it is deprecated to implement
`joinColumnName()` with only one argument.
### Before
```php
<?php
class MyStrategy implements NamingStrategy
{
/**
* @param string $propertyName A property name.
*/
public function joinColumnName($propertyName): string
{
// …
}
}
```
### After
For backward-compatibility reasons, the parameter has to be optional, but can
be documented as guaranteed to be a `class-string`.
```php
<?php
class MyStrategy implements NamingStrategy
{
/**
* @param string $propertyName A property name.
* @param class-string $className
*/
public function joinColumnName($propertyName, $className = null): string
{
// …
}
}
```
## Deprecated methods related to named queries
The following methods have been deprecated:
- `Doctrine\ORM\Query\ResultSetMappingBuilder::addNamedNativeQueryMapping()`
- `Doctrine\ORM\Query\ResultSetMappingBuilder::addNamedNativeQueryResultClassMapping()`
- `Doctrine\ORM\Query\ResultSetMappingBuilder::addNamedNativeQueryResultSetMapping()`
- `Doctrine\ORM\Query\ResultSetMappingBuilder::addNamedNativeQueryEntityResultMapping()`
## Deprecated classes related to Doctrine 1 and reverse engineering
The following classes have been deprecated:
- `Doctrine\ORM\Tools\ConvertDoctrine1Schema`
- `Doctrine\ORM\Tools\DisconnectedClassMetadataFactory`
## Deprecate `ClassMetadataInfo` usage
It is deprecated to pass `Doctrine\ORM\Mapping\ClassMetadataInfo` instances
that are not also instances of `Doctrine\ORM\ClassMetadata` to the following
methods:
- `Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder::__construct()`
- `Doctrine\ORM\Mapping\Driver\DatabaseDriver::loadMetadataForClass()`
- `Doctrine\ORM\Tools\SchemaValidator::validateClass()`
# Upgrade to 2.12
## Deprecated the `doctrine` binary.
The documentation explains how the console tools can be bootstrapped for
standalone usage.
The method `ConsoleRunner::printCliConfigTemplate()` is deprecated because it
was only useful in the context of the `doctrine` binary.
## Deprecate omitting `$class` argument to `ORMInvalidArgumentException::invalidIdentifierBindingEntity()`
To make it easier to identify understand the cause for that exception, it is
deprecated to omit the class name when calling
`ORMInvalidArgumentException::invalidIdentifierBindingEntity()`.
## Deprecate `Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper`
Using a console helper to provide the ORM's console commands with one or
multiple entity managers had been deprecated with 2.9 already. This leaves
The `EntityManagerHelper` class with no purpose which is why it is now
deprecated too. Applications that still rely on the `em` console helper, can
easily recreate that class in their own codebase.
## Deprecate custom repository classes that don't extend `EntityRepository`
Although undocumented, it is currently possible to configure a custom repository
class that implements `ObjectRepository` but does not extend the
`EntityRepository` base class.
This is now deprecated. Please extend `EntityRepository` instead.
## Deprecated more APIs related to entity namespace aliases
```diff
-$config = $entityManager->getConfiguration();
-$config->addEntityNamespace('CMS', 'My\App\Cms');
+use My\App\Cms\CmsUser;
-$entityManager->getRepository('CMS:CmsUser');
+$entityManager->getRepository(CmsUser::class);
```
## Deprecate `AttributeDriver::getReader()` and `AnnotationDriver::getReader()`
That method was inherited from the abstract `AnnotationDriver` class of
`doctrine/persistence`, and does not seem to serve any purpose.
## Un-deprecate `Doctrine\ORM\Proxy\Proxy`
Because no forward-compatible new proxy solution had been implemented yet, the
current proxy mechanism is not considered deprecated anymore for the time
being. This applies to the following interfaces/classes:
* `Doctrine\ORM\Proxy\Proxy`
* `Doctrine\ORM\Proxy\ProxyFactory`
These methods have been un-deprecated:
* `Doctrine\ORM\Configuration::getAutoGenerateProxyClasses()`
* `Doctrine\ORM\Configuration::getProxyDir()`
* `Doctrine\ORM\Configuration::getProxyNamespace()`
Note that the `Doctrine\ORM\Proxy\Autoloader` remains deprecated and will be removed in 3.0.
## Deprecate helper methods from `AbstractCollectionPersister`
The following protected methods of
`Doctrine\ORM\Cache\Persister\Collection\AbstractCollectionPersister`
are not in use anymore and will be removed.
* `evictCollectionCache()`
* `evictElementCache()`
## Deprecate `Doctrine\ORM\Query\TreeWalkerChainIterator`
This class won't have a replacement.
## Deprecate `OnClearEventArgs::getEntityClass()` and `OnClearEventArgs::clearsAllEntities()`
These methods will be removed in 3.0 along with the ability to partially clear
the entity manager.
## Deprecate `Doctrine\ORM\Configuration::newDefaultAnnotationDriver`
This functionality has been moved to the new `ORMSetup` class. Call
`Doctrine\ORM\ORMSetup::createDefaultAnnotationDriver()` to create
a new annotation driver.
## Deprecate `Doctrine\ORM\Tools\Setup`
In our effort to migrate from Doctrine Cache to PSR-6, the `Setup` class which
accepted a Doctrine Cache instance in each method has been deprecated.
The replacement is `Doctrine\ORM\ORMSetup` which accepts a PSR-6
cache instead.
## Deprecate `Doctrine\ORM\Cache\MultiGetRegion`
The interface will be merged with `Doctrine\ORM\Cache\Region` in 3.0.
# Upgrade to 2.11
## Rename `AbstractIdGenerator::generate()` to `generateId()`
Implementations of `AbstractIdGenerator` have to override the method
`generateId()` without calling the parent implementation. Not doing so is
deprecated. Calling `generate()` on any `AbstractIdGenerator` implementation
is deprecated.
## PSR-6-based second level cache
The second level cache has been reworked to consume a PSR-6 cache. Using a
Doctrine Cache instance is deprecated.
* `DefaultCacheFactory`: The constructor expects a PSR-6 cache item pool as
second argument now.
* `DefaultMultiGetRegion`: This class is deprecated in favor of `DefaultRegion`.
* `DefaultRegion`:
* The constructor expects a PSR-6 cache item pool as second argument now.
* The protected `$cache` property is deprecated.
* The properties `$name` and `$lifetime` as well as the constant
`REGION_KEY_SEPARATOR` and the method `getCacheEntryKey()` are flagged as
`@internal` now. They all will become `private` in 3.0.
* The method `getCache()` is deprecated without replacement.
## Deprecated: `Doctrine\ORM\Mapping\Driver\PHPDriver`
Use `StaticPHPDriver` instead when you want to programmatically configure
entity metadata.
You can convert mappings with the `orm:convert-mapping` command or more simply
in this case, `include` the metadata file from the `loadMetadata` static method
used by the `StaticPHPDriver`.
## Deprecated: `Setup::registerAutoloadDirectory()`
Use Composer's autoloader instead.
## Deprecated: `AbstractHydrator::hydrateRow()`
Following the deprecation of the method `AbstractHydrator::iterate()`, the
method `hydrateRow()` has been deprecated as well.
## Deprecate cache settings inspection
Doctrine does not provide its own cache implementation anymore and relies on
the PSR-6 standard instead. As a consequence, we cannot determine anymore
whether a given cache adapter is suitable for a production environment.
Because of that, functionality that aims to do so has been deprecated:
* `Configuration::ensureProductionSettings()`
* the `orm:ensure-production-settings` console command
# Upgrade to 2.10
## BC Break: `UnitOfWork` now relies on SPL object IDs, not hashes
When calling the following methods, you are now supposed to use the result of
`spl_object_id()`, and not `spl_object_hash()`:
- `UnitOfWork::clearEntityChangeSet()`
- `UnitOfWork::setOriginalEntityProperty()`
## BC Break: Removed `TABLE` id generator strategy
The implementation was unfinished for 14 years.
It is now deprecated to rely on:
- `Doctrine\ORM\Id\TableGenerator`;
- `Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_TABLE`;
- `Doctrine\ORM\Mapping\ClassMetadata::$tableGeneratorDefinition`;
- or `Doctrine\ORM\Mapping\ClassMetadata::isIdGeneratorTable()`.
## New method `Doctrine\ORM\EntityManagerInterface#wrapInTransaction($func)`
Works the same as `Doctrine\ORM\EntityManagerInterface#transactional()` but returns any value returned from `$func` closure rather than just _non-empty value returned from the closure or true_.
Because of BC policy, the method does not exist on the interface yet. This is the example of safe usage:
```php
function foo(EntityManagerInterface $entityManager, callable $func) {
if (method_exists($entityManager, 'wrapInTransaction')) {
return $entityManager->wrapInTransaction($func);
}
return $entityManager->transactional($func);
}
```
`Doctrine\ORM\EntityManagerInterface#transactional()` has been deprecated.
## Minor BC BREAK: some exception methods have been removed
The following methods were not in use and are very unlikely to be used by
downstream packages or applications, and were consequently removed:
- `ORMException::entityMissingForeignAssignedId`
- `ORMException::entityMissingAssignedIdForField`
- `ORMException::invalidFlushMode`
## Deprecated: database-side UUID generation
[DB-generated UUIDs are deprecated as of `doctrine/dbal` 2.8][DBAL deprecation].
As a consequence, using the `UUID` strategy for generating identifiers is deprecated as well.
Furthermore, relying on the following classes and methods is deprecated:
- `Doctrine\ORM\Id\UuidGenerator`
- `Doctrine\ORM\Mapping\ClassMetadataInfo::isIdentifierUuid()`
[DBAL deprecation]: https://github.com/doctrine/dbal/pull/3212
## Minor BC BREAK: Custom hydrators and `toIterable()`
The type declaration of the `$stmt` parameter of `AbstractHydrator::toIterable()` has been removed. This change might
break custom hydrator implementations that override this very method.
Overriding this method is not recommended, which is why the method is documented as `@final` now.
```diff
- public function toIterable(ResultStatement $stmt, ResultSetMapping $resultSetMapping, array $hints = []): iterable
+ public function toIterable($stmt, ResultSetMapping $resultSetMapping, array $hints = []): iterable
```
## Deprecated: Entity Namespace Aliases
Entity namespace aliases are deprecated, use the magic ::class constant to abbreviate full class names
in EntityManager, EntityRepository and DQL.
```diff
- $entityManager->find('MyBundle:User', $id);
+ $entityManager->find(User::class, $id);
```
# Upgrade to 2.9
## Minor BC BREAK: Setup tool needs cache implementation
With the deprecation of doctrine/cache, the setup tool might no longer work as expected without a different cache
implementation. To work around this:
* Install symfony/cache: `composer require symfony/cache`. This will keep previous behaviour without any changes
* Instantiate caches yourself: to use a different cache implementation, pass a cache instance when calling any
configuration factory in the setup tool:
```diff
- $config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode, $proxyDir);
+ $cache = \Doctrine\Common\Cache\Psr6\DoctrineProvider::wrap($anyPsr6Implementation);
+ $config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode, $proxyDir, $cache);
```
* As a quick workaround, you can lock the doctrine/cache dependency to work around this: `composer require doctrine/cache ^1.11`.
Note that this is only recommended as a bandaid fix, as future versions of ORM will no longer work with doctrine/cache
1.11.
## Deprecated: doctrine/cache for metadata caching
The `Doctrine\ORM\Configuration#setMetadataCacheImpl()` method is deprecated and should no longer be used. Please use
`Doctrine\ORM\Configuration#setMetadataCache()` with any PSR-6 cache adapter instead.
## Removed: flushing metadata cache
To support PSR-6 caches, the `--flush` option for the `orm:clear-cache:metadata` command is ignored. Metadata cache is
now always cleared regardless of the cache adapter being used.
# Upgrade to 2.8
## Minor BC BREAK: Failed commit now throw OptimisticLockException
Method `Doctrine\ORM\UnitOfWork#commit()` can throw an OptimisticLockException when a commit silently fails and returns false
since `Doctrine\DBAL\Connection#commit()` signature changed from returning void to boolean
## Deprecated: `Doctrine\ORM\AbstractQuery#iterate()`
The method `Doctrine\ORM\AbstractQuery#iterate()` is deprecated in favor of `Doctrine\ORM\AbstractQuery#toIterable()`.
Note that `toIterable()` yields results of the query, unlike `iterate()` which yielded each result wrapped into an array.
# Upgrade to 2.7
## Added `Doctrine\ORM\AbstractQuery#enableResultCache()` and `Doctrine\ORM\AbstractQuery#disableResultCache()` methods
Method `Doctrine\ORM\AbstractQuery#useResultCache()` which could be used for both enabling and disabling the cache
(depending on passed flag) was split into two.
## Minor BC BREAK: paginator output walkers aren't be called anymore on sub-queries for queries without max results
To optimize DB interaction, `Doctrine\ORM\Tools\Pagination\Paginator` no longer fetches identifiers to be able to
perform the pagination with join collections when max results isn't set in the query.
## Minor BC BREAK: tables filtered with `schema_filter` are no longer created
When generating schema diffs, if a source table is filtered out by a `schema_filter` expression, then a `CREATE TABLE` was
always generated, even if the table already existed. This has been changed in this release and the table will no longer
be created.
## Deprecated number unaware `Doctrine\ORM\Mapping\UnderscoreNamingStrategy`
In the last patch of the `v2.6.x` series, we fixed a bug that was not converting names properly when they had numbers
(e.g.: `base64Encoded` was wrongly converted to `base64encoded` instead of `base64_encoded`).
In order to not break BC we've introduced a way to enable the fixed behavior using a boolean constructor argument. This
argument will be removed in 3.0 and the default behavior will be the fixed one.
## Deprecated: `Doctrine\ORM\AbstractQuery#useResultCache()`
Method `Doctrine\ORM\AbstractQuery#useResultCache()` is deprecated because it is split into `enableResultCache()`
and `disableResultCache()`. It will be removed in 3.0.
## Deprecated code generators and related console commands
These console commands have been deprecated:
* `orm:convert-mapping`
* `orm:generate:entities`
* `orm:generate-repositories`
These classes have been deprecated:
* `Doctrine\ORM\Tools\EntityGenerator`
* `Doctrine\ORM\Tools\EntityRepositoryGenerator`
Whole Doctrine\ORM\Tools\Export namespace with all its members have been deprecated as well.
## Deprecated `Doctrine\ORM\Proxy\Proxy` marker interface
Proxy objects in Doctrine ORM 3.0 will no longer implement `Doctrine\ORM\Proxy\Proxy` nor
`Doctrine\Persistence\Proxy`: instead, they implement
`ProxyManager\Proxy\GhostObjectInterface`.
These related classes have been deprecated:
* `Doctrine\ORM\Proxy\ProxyFactory`
* `Doctrine\ORM\Proxy\Autoloader` - we suggest using the composer autoloader instead
These methods have been deprecated:
* `Doctrine\ORM\Configuration#getAutoGenerateProxyClasses()`
* `Doctrine\ORM\Configuration#getProxyDir()`
* `Doctrine\ORM\Configuration#getProxyNamespace()`
## Deprecated `Doctrine\ORM\Version`
The `Doctrine\ORM\Version` class is now deprecated and will be removed in Doctrine ORM 3.0:
please refrain from checking the ORM version at runtime or use Composer's [runtime API](https://getcomposer.org/doc/07-runtime.md#knowing-whether-package-x-is-installed-in-version-y).
## Deprecated `EntityManager#merge()` method
Merge semantics was a poor fit for the PHP "share-nothing" architecture.
In addition to that, merging caused multiple issues with data integrity
in the managed entity graph, which was constantly spawning more edge-case bugs/scenarios.
The following API methods were therefore deprecated:
* `EntityManager#merge()`
* `UnitOfWork#merge()`
An alternative to `EntityManager#merge()` will not be provided by ORM 3.0, since the merging
semantics should be part of the business domain rather than the persistence domain of an
application. If your application relies heavily on CRUD-alike interactions and/or `PATCH`
restful operations, you should look at alternatives such as [JMSSerializer](https://github.com/schmittjoh/serializer).
## Extending `EntityManager` is deprecated
Final keyword will be added to the `EntityManager::class` in Doctrine ORM 3.0 in order to ensure that EntityManager
is not used as valid extension point. Valid extension point should be EntityManagerInterface.
## Deprecated `EntityManager#clear($entityName)`
If your code relies on clearing a single entity type via `EntityManager#clear($entityName)`,
the signature has been changed to `EntityManager#clear()`.
The main reason is that partial clears caused multiple issues with data integrity
in the managed entity graph, which was constantly spawning more edge-case bugs/scenarios.
## Deprecated `EntityManager#flush($entity)` and `EntityManager#flush($entities)`
If your code relies on single entity flushing optimisations via
`EntityManager#flush($entity)`, the signature has been changed to
`EntityManager#flush()`.
Said API was affected by multiple data integrity bugs due to the fact
that change tracking was being restricted upon a subset of the managed
entities. The ORM cannot support committing subsets of the managed
entities while also guaranteeing data integrity, therefore this
utility was removed.
The `flush()` semantics will remain the same, but the change tracking will be performed
on all entities managed by the unit of work, and not just on the provided
`$entity` or `$entities`, as the parameter is now completely ignored.
The same applies to `UnitOfWork#commit($entity)`, which will simply be
`UnitOfWork#commit()`.
If you would still like to perform batching operations over small `UnitOfWork`
instances, it is suggested to follow these paths instead:
* eagerly use `EntityManager#clear()` in conjunction with a specific second level
cache configuration (see http://docs.doctrine-project.org/projects/doctrine-orm/en/stable/reference/second-level-cache.html)
* use an explicit change tracking policy (see http://docs.doctrine-project.org/projects/doctrine-orm/en/stable/reference/change-tracking-policies.html)
## Deprecated `YAML` mapping drivers.
If your code relies on `YamlDriver` or `SimpleYamlDriver`, you **MUST** change to
annotation or XML drivers instead.
## Deprecated: `Doctrine\ORM\EntityManagerInterface#copy()`
Method `Doctrine\ORM\EntityManagerInterface#copy()` never got its implementation and is deprecated.
It will be removed in 3.0.
# Upgrade to 2.6
## Added `Doctrine\ORM\EntityRepository::count()` method
`Doctrine\ORM\EntityRepository::count()` has been added. This new method has different
signature than `Countable::count()` (required parameter) and therefore are not compatible.
If your repository implemented the `Countable` interface, you will have to use
`$repository->count([])` instead and not implement `Countable` interface anymore.
## Minor BC BREAK: `Doctrine\ORM\Tools\Console\ConsoleRunner` is now final
Since it's just an utilitarian class and should not be inherited.
## Minor BC BREAK: removed `Doctrine\ORM\Query\QueryException::associationPathInverseSideNotSupported()`
Method `Doctrine\ORM\Query\QueryException::associationPathInverseSideNotSupported()`
now has a required parameter `$pathExpr`.
## Minor BC BREAK: removed `Doctrine\ORM\Query\Parser#isInternalFunction()`
Method `Doctrine\ORM\Query\Parser#isInternalFunction()` was removed because
the distinction between internal function and user defined DQL was removed.
[#6500](https://github.com/doctrine/orm/pull/6500)
## Minor BC BREAK: removed `Doctrine\ORM\ORMException#overwriteInternalDQLFunctionNotAllowed()`
Method `Doctrine\ORM\Query\Parser#overwriteInternalDQLFunctionNotAllowed()` was
removed because of the choice to allow users to overwrite internal functions, ie
`AVG`, `SUM`, `COUNT`, `MIN` and `MAX`. [#6500](https://github.com/doctrine/orm/pull/6500)
## PHP 7.1 is now required
Doctrine 2.6 now requires PHP 7.1 or newer.
As a consequence, automatic cache setup in Doctrine\ORM\Tools\Setup::create*Configuration() was changed:
- APCu extension (ext-apcu) will now be used instead of abandoned APC (ext-apc).
- Memcached extension (ext-memcached) will be used instead of obsolete Memcache (ext-memcache).
- XCache support was dropped as it doesn't work with PHP 7.
# Upgrade to 2.5
## Minor BC BREAK: removed `Doctrine\ORM\Query\SqlWalker#walkCaseExpression()`
Method `Doctrine\ORM\Query\SqlWalker#walkCaseExpression()` was unused and part
of the internal API of the ORM, so it was removed. [#5600](https://github.com/doctrine/orm/pull/5600).
## Minor BC BREAK: removed $className parameter on `AbstractEntityInheritancePersister#getSelectJoinColumnSQL()`
As `$className` parameter was not used in the method, it was safely removed.
## Minor BC BREAK: query cache key time is now a float
As of 2.5.5, the `QueryCacheEntry#time` property will contain a float value
instead of an integer in order to have more precision and also to be consistent
with the `TimestampCacheEntry#time`.
## Minor BC BREAK: discriminator map must now include all non-transient classes
It is now required that you declare the root of an inheritance in the
discriminator map.
When declaring an inheritance map, it was previously possible to skip the root
of the inheritance in the discriminator map. This was actually a validation
mistake by Doctrine2 and led to problems when trying to persist instances of
that class.
If you don't plan to persist instances some classes in your inheritance, then
either:
- make those classes `abstract`
- map those classes as `MappedSuperclass`
## Minor BC BREAK: ``EntityManagerInterface`` instead of ``EntityManager`` in type-hints
As of 2.5, classes requiring the ``EntityManager`` in any method signature will now require
an ``EntityManagerInterface`` instead.
If you are extending any of the following classes, then you need to check following
signatures:
- ``Doctrine\ORM\Tools\DebugUnitOfWorkListener#dumpIdentityMap(EntityManagerInterface $em)``
- ``Doctrine\ORM\Mapping\ClassMetadataFactory#setEntityManager(EntityManagerInterface $em)``
## Minor BC BREAK: Custom Hydrators API change
As of 2.5, `AbstractHydrator` does not enforce the usage of cache as part of
API, and now provides you a clean API for column information through the method
`hydrateColumnInfo($column)`.
Cache variable being passed around by reference is no longer needed since
Hydrators are per query instantiated since Doctrine 2.4.
## Minor BC BREAK: Entity based ``EntityManager#clear()`` calls follow cascade detach
Whenever ``EntityManager#clear()`` method gets called with a given entity class
name, until 2.4, it was only detaching the specific requested entity.
As of 2.5, ``EntityManager`` will follow configured cascades, providing a better
memory management since associations will be garbage collected, optimizing
resources consumption on long running jobs.
## BC BREAK: NamingStrategy interface changes
1. A new method ``embeddedFieldToColumnName($propertyName, $embeddedColumnName)``
This method generates the column name for fields of embedded objects. If you implement your custom NamingStrategy, you
now also need to implement this new method.
2. A change to method ``joinColumnName()`` to include the $className
## Updates on entities scheduled for deletion are no longer processed
In Doctrine 2.4, if you modified properties of an entity scheduled for deletion, UnitOfWork would
produce an UPDATE statement to be executed right before the DELETE statement. The entity in question
was therefore present in ``UnitOfWork#entityUpdates``, which means that ``preUpdate`` and ``postUpdate``
listeners were (quite pointlessly) called. In ``preFlush`` listeners, it used to be possible to undo
the scheduled deletion for updated entities (by calling ``persist()`` if the entity was found in both
``entityUpdates`` and ``entityDeletions``). This does not work any longer, because the entire changeset
calculation logic is optimized away.
## Minor BC BREAK: Default lock mode changed from LockMode::NONE to null in method signatures
A misconception concerning default lock mode values in method signatures lead to unexpected behaviour
in SQL statements on SQL Server. With a default lock mode of ``LockMode::NONE`` throughout the
method signatures in ORM, the table lock hint ``WITH (NOLOCK)`` was appended to all locking related
queries by default. This could result in unpredictable results because an explicit ``WITH (NOLOCK)``
table hint tells SQL Server to run a specific query in transaction isolation level READ UNCOMMITTED
instead of the default READ COMMITTED transaction isolation level.
Therefore there now is a distinction between ``LockMode::NONE`` and ``null`` to be able to tell
Doctrine whether to add table lock hints to queries by intention or not. To achieve this, the following
method signatures have been changed to declare ``$lockMode = null`` instead of ``$lockMode = LockMode::NONE``:
- ``Doctrine\ORM\Cache\Persister\AbstractEntityPersister#getSelectSQL()``
- ``Doctrine\ORM\Cache\Persister\AbstractEntityPersister#load()``
- ``Doctrine\ORM\Cache\Persister\AbstractEntityPersister#refresh()``
- ``Doctrine\ORM\Decorator\EntityManagerDecorator#find()``
- ``Doctrine\ORM\EntityManager#find()``
- ``Doctrine\ORM\EntityRepository#find()``
- ``Doctrine\ORM\Persisters\BasicEntityPersister#getSelectSQL()``
- ``Doctrine\ORM\Persisters\BasicEntityPersister#load()``
- ``Doctrine\ORM\Persisters\BasicEntityPersister#refresh()``
- ``Doctrine\ORM\Persisters\EntityPersister#getSelectSQL()``
- ``Doctrine\ORM\Persisters\EntityPersister#load()``
- ``Doctrine\ORM\Persisters\EntityPersister#refresh()``
- ``Doctrine\ORM\Persisters\JoinedSubclassPersister#getSelectSQL()``
You should update signatures for these methods if you have subclassed one of the above classes.
Please also check the calling code of these methods in your application and update if necessary.
**Note:**
This in fact is really a minor BC BREAK and should not have any affect on database vendors
other than SQL Server because it is the only one that supports and therefore cares about
``LockMode::NONE``. It's really just a FIX for SQL Server environments using ORM.
## Minor BC BREAK: `__clone` method not called anymore when entities are instantiated via metadata API
As of PHP 5.6, instantiation of new entities is deferred to the
[`doctrine/instantiator`](https://github.com/doctrine/instantiator) library, which will avoid calling `__clone`
or any public API on instantiated objects.
## BC BREAK: `Doctrine\ORM\Repository\DefaultRepositoryFactory` is now `final`
Please implement the `Doctrine\ORM\Repository\RepositoryFactory` interface instead of extending
the `Doctrine\ORM\Repository\DefaultRepositoryFactory`.
## BC BREAK: New object expression DQL queries now respects user provided aliasing and not return consumed fields
When executing DQL queries with new object expressions, instead of returning DTOs numerically indexes, it will now respect user provided aliases. Consider the following query:
SELECT new UserDTO(u.id,u.name) as user,new AddressDTO(a.street,a.postalCode) as address, a.id as addressId FROM User u INNER JOIN u.addresses a WITH a.isPrimary = true
Previously, your result would be similar to this:
array(
0=>array(
0=>{UserDTO object},
1=>{AddressDTO object},
2=>{u.id scalar},
3=>{u.name scalar},
4=>{a.street scalar},
5=>{a.postalCode scalar},
'addressId'=>{a.id scalar},
),
...
)
From now on, the resultset will look like this:
array(
0=>array(
'user'=>{UserDTO object},
'address'=>{AddressDTO object},
'addressId'=>{a.id scalar}
),
...
)
## Minor BC BREAK: added second parameter $indexBy in EntityRepository#createQueryBuilder method signature
Added way to access the underlying QueryBuilder#from() method's 'indexBy' parameter when using EntityRepository#createQueryBuilder()
# Upgrade to 2.4
## BC BREAK: Compatibility Bugfix in PersistentCollection#matching()
In Doctrine 2.3 it was possible to use the new ``matching($criteria)``
functionality by adding constraints for assocations based on ID:
Criteria::expr()->eq('association', $assocation->getId());
This functionality does not work on InMemory collections however, because
in memory criteria compares object values based on reference.
As of 2.4 the above code will throw an exception. You need to change
offending code to pass the ``$assocation`` reference directly:
Criteria::expr()->eq('association', $assocation);
## Composer is now the default autoloader
The test suite now runs with composer autoloading. Support for PEAR, and tarball autoloading is deprecated.
Support for GIT submodules is removed.
## OnFlush and PostFlush event always called
Before 2.4 the postFlush and onFlush events were only called when there were
actually entities that changed. Now these events are called no matter if there
are entities in the UoW or changes are found.
## Parenthesis are now considered in arithmetic expression
Before 2.4 parenthesis are not considered in arithmetic primary expression.
That's conceptually wrong, since it might result in wrong values. For example:
The DQL:
SELECT 100 / ( 2 * 2 ) FROM MyEntity
Before 2.4 it generates the SQL:
SELECT 100 / 2 * 2 FROM my_entity
Now parenthesis are considered, the previous DQL will generate:
SELECT 100 / (2 * 2) FROM my_entity
# Upgrade to 2.3
## Auto Discriminator Map breaks userland implementations with Listener
The new feature to detect discriminator maps automatically when none
are provided breaks userland implementations doing this with a
listener in ``loadClassMetadata`` event.
## EntityManager#find() not calls EntityRepository#find() anymore
Previous to 2.3, calling ``EntityManager#find()`` would be delegated to
``EntityRepository#find()``. This has lead to some unexpected behavior in the
core of Doctrine when people have overwritten the find method in their
repositories. That is why this behavior has been reversed in 2.3, and
``EntityRepository#find()`` calls ``EntityManager#find()`` instead.
## EntityGenerator add*() method generation
When generating an add*() method for a collection the EntityGenerator will now not
use the Type-Hint to get the singular for the collection name, but use the field-name
and strip a trailing "s" character if there is one.
## Merge copies non persisted properties too
When merging an entity in UoW not only mapped properties are copied, but also others.
## Query, QueryBuilder and NativeQuery parameters *BC break*
From now on, parameters in queries is an ArrayCollection instead of a simple array.
This affects heavily the usage of setParameters(), because it will not append anymore
parameters to query, but will actually override the already defined ones.
Whenever you are retrieving a parameter (ie. $query->getParameter(1)), you will
receive an instance of Query\Parameter, which contains the methods "getName",
"getValue" and "getType". Parameters are also only converted to when necessary, and
not when they are set.
Also, related functions were affected:
* execute($parameters, $hydrationMode) the argument $parameters can be either an key=>value array or an ArrayCollection instance
* iterate($parameters, $hydrationMode) the argument $parameters can be either an key=>value array or an ArrayCollection instance
* setParameters($parameters) the argument $parameters can be either an key=>value array or an ArrayCollection instance
* getParameters() now returns ArrayCollection instead of array
* getParameter($key) now returns Parameter instance instead of parameter value
## Query TreeWalker method renamed
Internal changes were made to DQL and SQL generation. If you have implemented your own TreeWalker,
you probably need to update it. The method walkJoinVariableDeclaration is now named walkJoin.
## New methods in TreeWalker interface *BC break*
Two methods getQueryComponents() and setQueryComponent() were added to the TreeWalker interface and all its implementations
including TreeWalkerAdapter, TreeWalkerChain and SqlWalker. If you have your own implementation not inheriting from one of the
above you must implement these new methods.
## Metadata Drivers
Metadata drivers have been rewritten to reuse code from `Doctrine\Persistence`. Anyone who is using the
`Doctrine\ORM\Mapping\Driver\Driver` interface should instead refer to
`Doctrine\Persistence\Mapping\Driver\MappingDriver`. Same applies to
`Doctrine\ORM\Mapping\Driver\AbstractFileDriver`: you should now refer to
`Doctrine\Persistence\Mapping\Driver\FileDriver`.
Also, following mapping drivers have been deprecated, please use their replacements in Doctrine\Common as listed:
* `Doctrine\ORM\Mapping\Driver\DriverChain` => `Doctrine\Persistence\Mapping\Driver\MappingDriverChain`
* `Doctrine\ORM\Mapping\Driver\PHPDriver` => `Doctrine\Persistence\Mapping\Driver\PHPDriver`
* `Doctrine\ORM\Mapping\Driver\StaticPHPDriver` => `Doctrine\Persistence\Mapping\Driver\StaticPHPDriver`
# Upgrade to 2.2
## ResultCache implementation rewritten
The result cache is completely rewritten and now works on the database result level, not inside the ORM AbstractQuery
anymore. This means that for result cached queries the hydration will now always be performed again, regardless of
the hydration mode. Affected areas are:
1. Fixes the problem that entities coming from the result cache were not registered in the UnitOfWork
leading to problems during EntityManager#flush. Calls to EntityManager#merge are not necessary anymore.
2. Affects the array hydrator which now includes the overhead of hydration compared to caching the final result.
The API is backwards compatible however most of the getter methods on the `AbstractQuery` object are now
deprecated in favor of calling AbstractQuery#getQueryCacheProfile(). This method returns a `Doctrine\DBAL\Cache\QueryCacheProfile`
instance with access to result cache driver, lifetime and cache key.
## EntityManager#getPartialReference() creates read-only entity
Entities returned from EntityManager#getPartialReference() are now marked as read-only if they
haven't been in the identity map before. This means objects of this kind never lead to changes
in the UnitOfWork.
## Fields omitted in a partial DQL query or a native query are never updated
Fields of an entity that are not returned from a partial DQL Query or native SQL query
will never be updated through an UPDATE statement.
## Removed support for onUpdate in @JoinColumn
The onUpdate foreign key handling makes absolutely no sense in an ORM. Additionally Oracle doesn't even support it. Support for it is removed.
## Changes in Annotation Handling
There have been some changes to the annotation handling in Common 2.2 again, that affect how people with old configurations
from 2.0 have to configure the annotation driver if they don't use `Configuration::newDefaultAnnotationDriver()`:
// Register the ORM Annotations in the AnnotationRegistry
AnnotationRegistry::registerFile('path/to/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php');
$reader = new \Doctrine\Common\Annotations\SimpleAnnotationReader();
$reader->addNamespace('Doctrine\ORM\Mapping');
$reader = new \Doctrine\Common\Annotations\CachedReader($reader, new ArrayCache());
$driver = new AnnotationDriver($reader, (array)$paths);
$config->setMetadataDriverImpl($driver);
## Scalar mappings can now be omitted from DQL result
You are now allowed to mark scalar SELECT expressions as HIDDEN and they are not hydrated anymore.
Example:
SELECT u, SUM(a.id) AS HIDDEN numArticles FROM User u LEFT JOIN u.Articles a ORDER BY numArticles DESC HAVING numArticles > 10
Your result will be a collection of Users, and not an array with key 0 as User object instance and "numArticles" as the number of articles per user
## Map entities as scalars in DQL result
When hydrating to array or even a mixed result in object hydrator, previously you had the 0 index holding you entity instance.
You are now allowed to alias this, providing more flexibility for you code.
Example:
SELECT u AS user FROM User u
Will now return a collection of arrays with index "user" pointing to the User object instance.
## Performance optimizations
Thousands of lines were completely reviewed and optimized for best performance.
Removed redundancy and improved code readability made now internal Doctrine code easier to understand.
Also, Doctrine 2.2 now is around 10-15% faster than 2.1.
## EntityManager#find(null)
Previously EntityManager#find(null) returned null. It now throws an exception.
# Upgrade to 2.1
## Interface for EntityRepository
The EntityRepository now has an interface Doctrine\Persistence\ObjectRepository. This means that your classes that override EntityRepository and extend find(), findOneBy() or findBy() must be adjusted to follow this interface.
## AnnotationReader changes
The annotation reader was heavily refactored between 2.0 and 2.1-RC1. In theory the operation of the new reader should be backwards compatible, but it has to be setup differently to work that way:
// new call to the AnnotationRegistry
\Doctrine\Common\Annotations\AnnotationRegistry::registerFile('/doctrine-src/src/Mapping/Driver/DoctrineAnnotations.php');
$reader = new \Doctrine\Common\Annotations\AnnotationReader();
$reader->setDefaultAnnotationNamespace('Doctrine\ORM\Mapping\\');
// new code necessary starting here
$reader->setIgnoreNotImportedAnnotations(true);
$reader->setEnableParsePhpImports(false);
$reader = new \Doctrine\Common\Annotations\CachedReader(
new \Doctrine\Common\Annotations\IndexedReader($reader), new ArrayCache()
);
This is already done inside the ``$config->newDefaultAnnotationDriver``, so everything should automatically work if you are using this method. You can verify if everything still works by executing a console command such as schema-validate that loads all metadata into memory.
# Update from 2.0-BETA3 to 2.0-BETA4
## XML Driver <change-tracking-policy /> element demoted to attribute
We changed how the XML Driver allows to define the change-tracking-policy. The working case is now:
<entity change-tracking-policy="DEFERRED_IMPLICT" />
# Update from 2.0-BETA2 to 2.0-BETA3
## Serialization of Uninitialized Proxies
As of Beta3 you can now serialize uninitialized proxies, an exception will only be thrown when
trying to access methods on the unserialized proxy as long as it has not been re-attached to the
EntityManager using `EntityManager#merge()`. See this example:
$proxy = $em->getReference('User', 1);
$serializedProxy = serialize($proxy);
$detachedProxy = unserialized($serializedProxy);
echo $em->contains($detachedProxy); // FALSE
try {
$detachedProxy->getId(); // uninitialized detached proxy
} catch(Exception $e) {
}
$attachedProxy = $em->merge($detachedProxy);
echo $attackedProxy->getId(); // works!
## Changed SQL implementation of Postgres and Oracle DateTime types
The DBAL Type "datetime" included the Timezone Offset in both Postgres and Oracle. As of this version they are now
generated without Timezone (TIMESTAMP WITHOUT TIME ZONE instead of TIMESTAMP WITH TIME ZONE).
See [this comment to Ticket DBAL-22](http://www.doctrine-project.org/jira/browse/DBAL-22?focusedCommentId=13396&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#action_13396)
for more details as well as migration issues for PostgreSQL and Oracle.
Both Postgres and Oracle will throw Exceptions during hydration of Objects with "DateTime" fields unless migration steps are taken!
## Removed multi-dot/deep-path expressions in DQL
The support for implicit joins in DQL through the multi-dot/Deep Path Expressions
was dropped. For example:
SELECT u FROM User u WHERE u.group.name = ?1
See the "u.group.id" here is using multi dots (deep expression) to walk
through the graph of objects and properties. Internally the DQL parser
would rewrite these queries to:
SELECT u FROM User u JOIN u.group g WHERE g.name = ?1
This explicit notation will be the only supported notation as of now. The internal
handling of multi-dots in the DQL Parser was very complex, error prone in edge cases
and required special treatment for several features we added. Additionally
it had edge cases that could not be solved without making the DQL Parser
even much more complex. For this reason we will drop the support for the
deep path expressions to increase maintainability and overall performance
of the DQL parsing process. This will benefit any DQL query being parsed,
even those not using deep path expressions.
Note that the generated SQL of both notations is exactly the same! You
don't loose anything through this.
## Default Allocation Size for Sequences
The default allocation size for sequences has been changed from 10 to 1. This step was made
to not cause confusion with users and also because it is partly some kind of premature optimization.
# Update from 2.0-BETA1 to 2.0-BETA2
There are no backwards incompatible changes in this release.
# Upgrade from 2.0-ALPHA4 to 2.0-BETA1
## EntityRepository deprecates access to protected variables
Instead of accessing protected variables for the EntityManager in
a custom EntityRepository it is now required to use the getter methods
for all the three instance variables:
* `$this->_em` now accessible through `$this->getEntityManager()`
* `$this->_class` now accessible through `$this->getClassMetadata()`
* `$this->_entityName` now accessible through `$this->getEntityName()`
Important: For Beta 2 the protected visibility of these three properties will be
changed to private!
## Console migrated to Symfony Console
The Doctrine CLI has been replaced by Symfony Console Configuration
Instead of having to specify:
[php]
$cliConfig = new CliConfiguration();
$cliConfig->setAttribute('em', $entityManager);
You now have to configure the script like:
[php]
$helperSet = new \Symfony\Components\Console\Helper\HelperSet(array(
'db' => new \Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper($em->getConnection()),
'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper($em)
));
## Console: No need for Mapping Paths anymore
In previous versions you had to specify the --from and --from-path options
to show where your mapping paths are from the console. However this information
is already known from the Mapping Driver configuration, so the requirement
for this options were dropped.
Instead for each console command all the entities are loaded and to
restrict the operation to one or more sub-groups you can use the --filter flag.
## AnnotationDriver is not a default mapping driver anymore
In conjunction with the recent changes to Console we realized that the
annotations driver being a default metadata driver lead to lots of glue
code in the console components to detect where entities lie and how to load
them for batch updates like SchemaTool and other commands. However the
annotations driver being a default driver does not really help that much
anyways.
Therefore we decided to break backwards compatibility in this issue and drop
the support for Annotations as Default Driver and require our users to
specify the driver explicitly (which allows us to ask for the path to all
entities).
If you are using the annotations metadata driver as default driver, you
have to add the following lines to your bootstrap code:
$driverImpl = $config->newDefaultAnnotationDriver(array(__DIR__."/Entities"));
$config->setMetadataDriverImpl($driverImpl);
You have to specify the path to your entities as either string of a single
path or array of multiple paths
to your entities. This information will be used by all console commands to
access all entities.
Xml and Yaml Drivers work as before!
## New inversedBy attribute
It is now *mandatory* that the owning side of a bidirectional association specifies the
'inversedBy' attribute that points to the name of the field on the inverse side that completes
the association. Example:
[php]
// BEFORE (ALPHA4 AND EARLIER)
class User
{
//...
/** @OneToOne(targetEntity="Address", mappedBy="user") */
private $address;
//...
}
class Address
{
//...
/** @OneToOne(targetEntity="User") */
private $user;
//...
}
// SINCE BETA1
// User class DOES NOT CHANGE
class Address
{
//...
/** @OneToOne(targetEntity="User", inversedBy="address") */
private $user;
//...
}
Thus, the inversedBy attribute is the counterpart to the mappedBy attribute. This change
was necessary to enable some simplifications and further performance improvements. We
apologize for the inconvenience.
## Default Property for Field Mappings
The "default" option for database column defaults has been removed. If desired, database column defaults can
be implemented by using the columnDefinition attribute of the @Column annotation (or the appropriate XML and YAML equivalents).
Prefer PHP default values, if possible.
## Selecting Partial Objects
Querying for partial objects now has a new syntax. The old syntax to query for partial objects
now has a different meaning. This is best illustrated by an example. If you previously
had a DQL query like this:
[sql]
SELECT u.id, u.name FROM User u
Since BETA1, simple state field path expressions in the select clause are used to select
object fields as plain scalar values (something that was not possible before).
To achieve the same result as previously (that is, a partial object with only id and name populated)
you need to use the following, explicit syntax:
[sql]
SELECT PARTIAL u.{id,name} FROM User u
## XML Mapping Driver
The 'inheritance-type' attribute changed to take last bit of ClassMetadata constant names, i.e.
NONE, SINGLE_TABLE, INHERITANCE_TYPE_JOINED
## YAML Mapping Driver
The way to specify lifecycle callbacks in YAML Mapping driver was changed to allow for multiple callbacks
per event. The Old syntax ways:
[yaml]
lifecycleCallbacks:
doStuffOnPrePersist: prePersist
doStuffOnPostPersist: postPersist
The new syntax is:
[yaml]
lifecycleCallbacks:
prePersist: [ doStuffOnPrePersist, doOtherStuffOnPrePersistToo ]
postPersist: [ doStuffOnPostPersist ]
## PreUpdate Event Listeners
Event Listeners listening to the 'preUpdate' event can only affect the primitive values of entity changesets
by using the API on the `PreUpdateEventArgs` instance passed to the preUpdate listener method. Any changes
to the state of the entitys properties won't affect the database UPDATE statement anymore. This gives drastic
performance benefits for the preUpdate event.
## Collection API
The Collection interface in the Common package has been updated with some missing methods
that were present only on the default implementation, ArrayCollection. Custom collection
implementations need to be updated to adhere to the updated interface.
# Upgrade from 2.0-ALPHA3 to 2.0-ALPHA4
## CLI Controller changes
CLI main object changed its name and namespace. Renamed from Doctrine\ORM\Tools\Cli to Doctrine\Common\Cli\CliController.
Doctrine\Common\Cli\CliController now only deals with namespaces. Ready to go, Core, Dbal and Orm are available and you can subscribe new tasks by retrieving the namespace and including new task. Example:
[php]
$cli->getNamespace('Core')->addTask('my-example', '\MyProject\Tools\Cli\Tasks\MyExampleTask');
## CLI Tasks documentation
Tasks have implemented a new way to build documentation. Although it is still possible to define the help manually by extending the basicHelp and extendedHelp, they are now optional.
With new required method AbstractTask::buildDocumentation, its implementation defines the TaskDocumentation instance (accessible through AbstractTask::getDocumentation()), basicHelp and extendedHelp are now not necessary to be implemented.
## Changes in Method Signatures
* A bunch of Methods on both Doctrine\DBAL\Platforms\AbstractPlatform and Doctrine\DBAL\Schema\AbstractSchemaManager
have changed quite significantly by adopting the new Schema instance objects.
## Renamed Methods
* Doctrine\ORM\AbstractQuery::setExpireResultCache() -> expireResultCache()
* Doctrine\ORM\Query::setExpireQueryCache() -> expireQueryCache()
## SchemaTool Changes
* "doctrine schema-tool --drop" now always drops the complete database instead of
only those tables defined by the current database model. The previous method had
problems when foreign keys of orphaned tables pointed to tables that were scheduled
for deletion.
* Use "doctrine schema-tool --update" to get a save incremental update for your
database schema without deleting any unused tables, sequences or foreign keys.
* Use "doctrine schema-tool --complete-update" to do a full incremental update of
your schema.
# Upgrade from 2.0-ALPHA2 to 2.0-ALPHA3
This section details the changes made to Doctrine 2.0-ALPHA3 to make it easier for you
to upgrade your projects to use this version.
## CLI Changes
The $args variable used in the cli-config.php for configuring the Doctrine CLI has been renamed to $globalArguments.
## Proxy class changes
You are now required to make supply some minimalist configuration with regards to proxy objects. That involves 2 new configuration options. First, the directory where generated proxy classes should be placed needs to be specified. Secondly, you need to configure the namespace used for proxy classes. The following snippet shows an example:
[php]
// step 1: configure directory for proxy classes
// $config instanceof Doctrine\ORM\Configuration
$config->setProxyDir('/path/to/myproject/lib/MyProject/Generated/Proxies');
$config->setProxyNamespace('MyProject\Generated\Proxies');
Note that proxy classes behave exactly like any other classes when it comes to class loading. Therefore you need to make sure the proxy classes can be loaded by some class loader. If you place the generated proxy classes in a namespace and directory under your projects class files, like in the example above, it would be sufficient to register the MyProject namespace on a class loader. Since the proxy classes are contained in that namespace and adhere to the standards for class loading, no additional work is required.
Generating the proxy classes into a namespace within your class library is the recommended setup.
Entities with initialized proxy objects can now be serialized and unserialized properly from within the same application.
For more details refer to the Configuration section of the manual.
## Removed allowPartialObjects configuration option
The allowPartialObjects configuration option together with the `Configuration#getAllowPartialObjects` and `Configuration#setAllowPartialObjects` methods have been removed.
The new behavior is as if the option were set to FALSE all the time, basically disallowing partial objects globally. However, you can still use the `Query::HINT_FORCE_PARTIAL_LOAD` query hint to force a query to return partial objects for optimization purposes.
## Renamed Methods
* Doctrine\ORM\Configuration#getCacheDir() to getProxyDir()
* Doctrine\ORM\Configuration#setCacheDir($dir) to setProxyDir($dir)
================================================
FILE: ci/github/phpunit/mysqli.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../vendor/phpunit/phpunit/phpunit.xsd"
colors="true"
beStrictAboutOutputDuringTests="true"
displayDetailsOnTestsThatTriggerDeprecations="true"
displayDetailsOnTestsThatTriggerNotices="true"
displayDetailsOnTestsThatTriggerWarnings="true"
failOnNotice="true"
failOnWarning="true"
failOnRisky="true"
cacheDirectory=".phpunit.cache"
>
<php>
<ini name="error_reporting" value="-1" />
<var name="db_driver" value="mysqli"/>
<var name="db_host" value="127.0.0.1" />
<var name="db_port" value="3306"/>
<var name="db_user" value="root" />
<var name="db_dbname" value="doctrine_tests" />
<var name="db_default_table_option_charset" value="utf8mb4" />
<var name="db_default_table_option_collation" value="utf8mb4_unicode_ci" />
<var name="db_default_table_option_engine" value="InnoDB" />
<!-- necessary change for some CLI/console output test assertions -->
<env name="COLUMNS" value="120"/>
<env name="DOCTRINE_DEPRECATIONS" value="trigger"/>
</php>
<testsuites>
<testsuite name="Doctrine DBAL Test Suite">
<directory>../../../tests</directory>
</testsuite>
</testsuites>
<source ignoreSuppressionOfDeprecations="true">
<include>
<directory suffix=".php">../../../src</directory>
</include>
</source>
<groups>
<exclude>
<group>performance</group>
<group>locking_functional</group>
</exclude>
</groups>
</phpunit>
================================================
FILE: ci/github/phpunit/pdo_mysql.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../vendor/phpunit/phpunit/phpunit.xsd"
colors="true"
beStrictAboutOutputDuringTests="true"
displayDetailsOnTestsThatTriggerDeprecations="true"
displayDetailsOnTestsThatTriggerNotices="true"
displayDetailsOnTestsThatTriggerWarnings="true"
failOnNotice="true"
failOnWarning="true"
failOnRisky="true"
cacheDirectory=".phpunit.cache"
>
<php>
<ini name="error_reporting" value="-1" />
<var name="db_driver" value="pdo_mysql"/>
<var name="db_host" value="127.0.0.1" />
<var name="db_port" value="3306"/>
<var name="db_user" value="root" />
<var name="db_dbname" value="doctrine_tests" />
<var name="db_default_table_option_charset" value="utf8mb4" />
<var name="db_default_table_option_collation" value="utf8mb4_unicode_ci" />
<var name="db_default_table_option_engine" value="InnoDB" />
<!-- necessary change for some CLI/console output test assertions -->
<env name="COLUMNS" value="120"/>
<env name="DOCTRINE_DEPRECATIONS" value="trigger"/>
</php>
<testsuites>
<testsuite name="Doctrine DBAL Test Suite">
<directory>../../../tests</directory>
</testsuite>
</testsuites>
<source ignoreSuppressionOfDeprecations="true">
<include>
<directory suffix=".php">../../../src</directory>
</include>
</source>
<groups>
<exclude>
<group>performance</group>
<group>locking_functional</group>
</exclude>
</groups>
</phpunit>
================================================
FILE: ci/github/phpunit/pdo_pgsql.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../vendor/phpunit/phpunit/phpunit.xsd"
colors="true"
beStrictAboutOutputDuringTests="true"
displayDetailsOnTestsThatTriggerDeprecations="true"
displayDetailsOnTestsThatTriggerNotices="true"
displayDetailsOnTestsThatTriggerWarnings="true"
failOnNotice="true"
failOnWarning="true"
failOnRisky="true"
cacheDirectory=".phpunit.cache"
>
<php>
<ini name="error_reporting" value="-1" />
<var name="db_driver" value="pdo_pgsql"/>
<var name="db_host" value="localhost" />
<var name="db_user" value="postgres" />
<var name="db_password" value="postgres" />
<var name="db_dbname" value="doctrine_tests" />
<!-- necessary change for some CLI/console output test assertions -->
<env name="COLUMNS" value="120"/>
<env name="DOCTRINE_DEPRECATIONS" value="trigger"/>
</php>
<testsuites>
<testsuite name="Doctrine DBAL Test Suite">
<directory>../../../tests</directory>
</testsuite>
</testsuites>
<source ignoreSuppressionOfDeprecations="true">
<include>
<directory suffix=".php">../../../src</directory>
</include>
</source>
<groups>
<exclude>
<group>performance</group>
<group>locking_functional</group>
</exclude>
</groups>
</phpunit>
================================================
FILE: ci/github/phpunit/pdo_sqlite.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../vendor/phpunit/phpunit/phpunit.xsd"
colors="true"
beStrictAboutOutputDuringTests="true"
displayDetailsOnTestsThatTriggerDeprecations="true"
displayDetailsOnTestsThatTriggerNotices="true"
displayDetailsOnTestsThatTriggerWarnings="true"
failOnNotice="true"
failOnWarning="true"
failOnRisky="true"
cacheDirectory=".phpunit.cache"
>
<php>
<ini name="error_reporting" value="-1" />
<!-- use an in-memory sqlite database -->
<var name="db_driver" value="pdo_sqlite"/>
<var name="db_memory" value="true"/>
<!-- necessary change for some CLI/console output test assertions -->
<env name="COLUMNS" value="120"/>
<env name="DOCTRINE_DEPRECATIONS" value="trigger"/>
</php>
<testsuites>
<testsuite name="Doctrine DBAL Test Suite">
<directory>../../../tests</directory>
</testsuite>
</testsuites>
<source ignoreSuppressionOfDeprecations="true">
<include>
<directory suffix=".php">../../../src</directory>
</include>
</source>
<groups>
<exclude>
<group>performance</group>
<group>locking_functional</group>
</exclude>
</groups>
</phpunit>
================================================
FILE: ci/github/phpunit/pgsql.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../vendor/phpunit/phpunit/phpunit.xsd"
colors="true"
beStrictAboutOutputDuringTests="true"
displayDetailsOnTestsThatTriggerDeprecations="true"
displayDetailsOnTestsThatTriggerNotices="true"
displayDetailsOnTestsThatTriggerWarnings="true"
failOnNotice="true"
failOnWarning="true"
failOnRisky="true"
cacheDirectory=".phpunit.cache"
>
<php>
<ini name="error_reporting" value="-1" />
<var name="db_driver" value="pgsql"/>
<var name="db_host" value="localhost" />
<var name="db_user" value="postgres" />
<var name="db_password" value="postgres" />
<var name="db_dbname" value="doctrine_tests" />
<!-- necessary change for some CLI/console output test assertions -->
<env name="COLUMNS" value="120"/>
<env name="DOCTRINE_DEPRECATIONS" value="trigger"/>
</php>
<testsuites>
<testsuite name="Doctrine DBAL Test Suite">
<directory>../../../tests</directory>
</testsuite>
</testsuites>
<source ignoreSuppressionOfDeprecations="true">
<include>
<directory suffix=".php">../../../src</directory>
</include>
</source>
<groups>
<exclude>
<group>performance</group>
<group>locking_functional</group>
</exclude>
</groups>
</phpunit>
================================================
FILE: ci/github/phpunit/sqlite3.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../vendor/phpunit/phpunit/phpunit.xsd"
colors="true"
beStrictAboutOutputDuringTests="true"
displayDetailsOnTestsThatTriggerDeprecations="true"
displayDetailsOnTestsThatTriggerNotices="true"
displayDetailsOnTestsThatTriggerWarnings="true"
failOnNotice="true"
failOnWarning="true"
failOnRisky="true"
cacheDirectory=".phpunit.cache"
>
<php>
<ini name="error_reporting" value="-1" />
<!-- use an in-memory sqlite database -->
<var name="db_driver" value="sqlite3"/>
<var name="db_memory" value="true"/>
<!-- necessary change for some CLI/console output test assertions -->
<env name="COLUMNS" value="120"/>
<env name="DOCTRINE_DEPRECATIONS" value="trigger"/>
</php>
<testsuites>
<testsuite name="Doctrine DBAL Test Suite">
<directory>../../../tests</directory>
</testsuite>
</testsuites>
<source ignoreSuppressionOfDeprecations="true">
<include>
<directory suffix=".php">../../../src</directory>
</include>
</source>
<groups>
<exclude>
<group>performance</group>
<group>locking_functional</group>
</exclude>
</groups>
</phpunit>
================================================
FILE: composer.json
================================================
{
"name": "doctrine/orm",
"description": "Object-Relational-Mapper for PHP",
"license": "MIT",
"type": "library",
"keywords": [
"orm",
"database"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com"
}
],
"homepage": "https://www.doctrine-project.org/projects/orm.html",
"require": {
"php": "^8.1",
"ext-ctype": "*",
"composer-runtime-api": "^2",
"doctrine/collections": "^2.2",
"doctrine/dbal": "^3.8.2 || ^4",
"doctrine/deprecations": "^0.5.3 || ^1",
"doctrine/event-manager": "^1.2 || ^2",
"doctrine/inflector": "^1.4 || ^2.0",
"doctrine/instantiator": "^1.3 || ^2",
"doctrine/lexer": "^3",
"doctrine/persistence": "^3.3.1 || ^4",
"psr/cache": "^1 || ^2 || ^3",
"symfony/console": "^5.4 || ^6.0 || ^7.0 || ^8.0",
"symfony/var-exporter": "^6.3.9 || ^7.0 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^14.0",
"phpbench/phpbench": "^1.0",
"phpstan/extension-installer": "^1.4",
"phpstan/phpstan": "2.1.23",
"phpstan/phpstan-deprecation-rules": "^2",
"phpunit/phpunit": "^10.5.0 || ^11.5",
"psr/log": "^1 || ^2 || ^3",
"symfony/cache": "^5.4 || ^6.2 || ^7.0 || ^8.0"
},
"suggest": {
"ext-dom": "Provides support for XSD validation for XML mapping files",
"symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0"
},
"autoload": {
"psr-4": {
"Doctrine\\ORM\\": "src"
}
},
"autoload-dev": {
"psr-4": {
"Doctrine\\Performance\\": "tests/Performance",
"Doctrine\\StaticAnalysis\\": "tests/StaticAnalysis",
"Doctrine\\Tests\\": "tests/Tests"
}
},
"config": {
"allow-plugins": {
"composer/package-versions-deprecated": true,
"dealerdirect/phpcodesniffer-composer-installer": true,
"phpstan/extension-installer": true
},
"sort-packages": true
},
"scripts": {
"docs": "composer --working-dir docs update && ./docs/vendor/bin/build-docs.sh @additional_args"
}
}
================================================
FILE: docs/.gitignore
================================================
composer.lock
vendor/
output/
================================================
FILE: docs/LICENSE.md
================================================
The Doctrine ORM documentation is licensed under [CC BY-NC-SA 3.0](https://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_US)
Creative Commons Legal Code
Attribution-NonCommercial-ShareAlike 3.0 Unported
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR
DAMAGES RESULTING FROM ITS USE.
License
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE
TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY
BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS
CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
CONDITIONS.
1. Definitions
a. "Adaptation" means a work based upon the Work, or upon the Work and
other pre-existing works, such as a translation, adaptation,
derivative work, arrangement of music or other alterations of a
literary or artistic work, or phonogram or performance and includes
cinematographic adaptations or any other form in which the Work may be
recast, transformed, or adapted including in any form recognizably
derived from the original, except that a work that constitutes a
Collection will not be considered an Adaptation for the purpose of
this License. For the avoidance of doubt, where the Work is a musical
work, performance or phonogram, the synchronization of the Work in
timed-relation with a moving image ("synching") will be considered an
Adaptation for the purpose of this License.
b. "Collection" means a collection of literary or artistic works, such as
encyclopedias and anthologies, or performances, phonograms or
broadcasts, or other works or subject matter other than works listed
in Section 1(g) below, which, by reason of the selection and
arrangement of their contents, constitute intellectual creations, in
which the Work is included in its entirety in unmodified form along
with one or more other contributions, each constituting separate and
independent works in themselves, which together are assembled into a
collective whole. A work that constitutes a Collection will not be
considered an Adaptation (as defined above) for the purposes of this
License.
c. "Distribute" means to make available to the public the original and
copies of the Work or Adaptation, as appropriate, through sale or
other transfer of ownership.
d. "License Elements" means the following high-level license attributes
as selected by Licensor and indicated in the title of this License:
Attribution, Noncommercial, ShareAlike.
e. "Licensor" means the individual, individuals, entity or entities that
offer(s) the Work under the terms of this License.
f. "Original Author" means, in the case of a literary or artistic work,
the individual, individuals, entity or entities who created the Work
or if no individual or entity can be identified, the publisher; and in
addition (i) in the case of a performance the actors, singers,
musicians, dancers, and other persons who act, sing, deliver, declaim,
play in, interpret or otherwise perform literary or artistic works or
expressions of folklore; (ii) in the case of a phonogram the producer
being the person or legal entity who first fixes the sounds of a
performance or other sounds; and, (iii) in the case of broadcasts, the
organization that transmits the broadcast.
g. "Work" means the literary and/or artistic work offered under the terms
of this License including without limitation any production in the
literary, scientific and artistic domain, whatever may be the mode or
form of its expression including digital form, such as a book,
pamphlet and other writing; a lecture, address, sermon or other work
of the same nature; a dramatic or dramatico-musical work; a
choreographic work or entertainment in dumb show; a musical
composition with or without words; a cinematographic work to which are
assimilated works expressed by a process analogous to cinematography;
a work of drawing, painting, architecture, sculpture, engraving or
lithography; a photographic work to which are assimilated works
expressed by a process analogous to photography; a work of applied
art; an illustration, map, plan, sketch or three-dimensional work
relative to geography, topography, architecture or science; a
performance; a broadcast; a phonogram; a compilation of data to the
extent it is protected as a copyrightable work; or a work performed by
a variety or circus performer to the extent it is not otherwise
considered a literary or artistic work.
h. "You" means an individual or entity exercising rights under this
License who has not previously violated the terms of this License with
respect to the Work, or who has received express permission from the
Licensor to exercise rights under this License despite a previous
violation.
i. "Publicly Perform" means to perform public recitations of the Work and
to communicate to the public those public recitations, by any means or
process, including by wire or wireless means or public digital
performances; to make available to the public Works in such a way that
members of the public may access these Works from a place and at a
place individually chosen by them; to perform the Work to the public
by any means or process and the communication to the public of the
performances of the Work, including by public digital performance; to
broadcast and rebroadcast the Work by any means including signs,
sounds or images.
j. "Reproduce" means to make copies of the Work by any means including
without limitation by sound or visual recordings and the right of
fixation and reproducing fixations of the Work, including storage of a
protected performance or phonogram in digital form or other electronic
medium.
2. Fair Dealing Rights. Nothing in this License is intended to reduce,
limit, or restrict any uses free from copyright or rights arising from
limitations or exceptions that are provided for in connection with the
copyright protection under copyright law or other applicable laws.
3. License Grant. Subject to the terms and conditions of this License,
Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
perpetual (for the duration of the applicable copyright) license to
exercise the rights in the Work as stated below:
a. to Reproduce the Work, to incorporate the Work into one or more
Collections, and to Reproduce the Work as incorporated in the
Collections;
b. to create and Reproduce Adaptations provided that any such Adaptation,
including any translation in any medium, takes reasonable steps to
clearly label, demarcate or otherwise identify that changes were made
to the original Work. For example, a translation could be marked "The
original work was translated from English to Spanish," or a
modification could indicate "The original work has been modified.";
c. to Distribute and Publicly Perform the Work including as incorporated
in Collections; and,
d. to Distribute and Publicly Perform Adaptations.
The above rights may be exercised in all media and formats whether now
known or hereafter devised. The above rights include the right to make
such modifications as are technically necessary to exercise the rights in
other media and formats. Subject to Section 8(f), all rights not expressly
granted by Licensor are hereby reserved, including but not limited to the
rights described in Section 4(e).
4. Restrictions. The license granted in Section 3 above is expressly made
subject to and limited by the following restrictions:
a. You may Distribute or Publicly Perform the Work only under the terms
of this License. You must include a copy of, or the Uniform Resource
Identifier (URI) for, this License with every copy of the Work You
Distribute or Publicly Perform. You may not offer or impose any terms
on the Work that restrict the terms of this License or the ability of
the recipient of the Work to exercise the rights granted to that
recipient under the terms of the License. You may not sublicense the
Work. You must keep intact all notices that refer to this License and
to the disclaimer of warranties with every copy of the Work You
Distribute or Publicly Perform. When You Distribute or Publicly
Perform the Work, You may not impose any effective technological
measures on the Work that restrict the ability of a recipient of the
Work from You to exercise the rights granted to that recipient under
the terms of the License. This Section 4(a) applies to the Work as
incorporated in a Collection, but this does not require the Collection
apart from the Work itself to be made subject to the terms of this
License. If You create a Collection, upon notice from any Licensor You
must, to the extent practicable, remove from the Collection any credit
as required by Section 4(d), as requested. If You create an
Adaptation, upon notice from any Licensor You must, to the extent
practicable, remove from the Adaptation any credit as required by
Section 4(d), as requested.
b. You may Distribute or Publicly Perform an Adaptation only under: (i)
the terms of this License; (ii) a later version of this License with
the same License Elements as this License; (iii) a Creative Commons
jurisdiction license (either this or a later license version) that
contains the same License Elements as this License (e.g.,
Attribution-NonCommercial-ShareAlike 3.0 US) ("Applicable License").
You must include a copy of, or the URI, for Applicable License with
every copy of each Adaptation You Distribute or Publicly Perform. You
may not offer or impose any terms on the Adaptation that restrict the
terms of the Applicable License or the ability of the recipient of the
Adaptation to exercise the rights granted to that recipient under the
terms of the Applicable License. You must keep intact all notices that
refer to the Applicable License and to the disclaimer of warranties
with every copy of the Work as included in the Adaptation You
Distribute or Publicly Perform. When You Distribute or Publicly
Perform the Adaptation, You may not impose any effective technological
measures on the Adaptation that restrict the ability of a recipient of
the Adaptation from You to exercise the rights granted to that
recipient under the terms of the Applicable License. This Section 4(b)
applies to the Adaptation as incorporated in a Collection, but this
does not require the Collection apart from the Adaptation itself to be
made subject to the terms of the Applicable License.
c. You may not exercise any of the rights granted to You in Section 3
above in any manner that is primarily intended for or directed toward
commercial advantage or private monetary compensation. The exchange of
the Work for other copyrighted works by means of digital file-sharing
or otherwise shall not be considered to be intended for or directed
toward commercial advantage or private monetary compensation, provided
there is no payment of any monetary compensation in con-nection with
the exchange of copyrighted works.
d. If You Distribute, or Publicly Perform the Work or any Adaptations or
Collections, You must, unless a request has been made pursuant to
Section 4(a), keep intact all copyright notices for the Work and
provide, reasonable to the medium or means You are utilizing: (i) the
name of the Original Author (or pseudonym, if applicable) if supplied,
and/or if the Original Author and/or Licensor designate another party
or parties (e.g., a sponsor institute, publishing entity, journal) for
attribution ("Attribution Parties") in Licensor's copyright notice,
terms of service or by other reasonable means, the name of such party
or parties; (ii) the title of the Work if supplied; (iii) to the
extent reasonably practicable, the URI, if any, that Licensor
specifies to be associated with the Work, unless such URI does not
refer to the copyright notice or licensing information for the Work;
and, (iv) consistent with Section 3(b), in the case of an Adaptation,
a credit identifying the use of the Work in the Adaptation (e.g.,
"French translation of the Work by Original Author," or "Screenplay
based on original Work by Original Author"). The credit required by
this Section 4(d) may be implemented in any reasonable manner;
provided, however, that in the case of a Adaptation or Collection, at
a minimum such credit will appear, if a credit for all contributing
authors of the Adaptation or Collection appears, then as part of these
credits and in a manner at least as prominent as the credits for the
other contributing authors. For the avoidance of doubt, You may only
use the credit required by this Section for the purpose of attribution
in the manner set out above and, by exercising Your rights under this
License, You may not implicitly or explicitly assert or imply any
connection with, sponsorship or endorsement by the Original Author,
Licensor and/or Attribution Parties, as appropriate, of You or Your
use of the Work, without the separate, express prior written
permission of the Original Author, Licensor and/or Attribution
Parties.
e. For the avoidance of doubt:
i. Non-waivable Compulsory License Schemes. In those jurisdictions in
which the right to collect royalties through any statutory or
compulsory licensing scheme cannot be waived, the Licensor
reserves the exclusive right to collect such royalties for any
exercise by You of the rights granted under this License;
ii. Waivable Compulsory License Schemes. In those jurisdictions in
which the right to collect royalties through any statutory or
compulsory licensing scheme can be waived, the Licensor reserves
the exclusive right to collect such royalties for any exercise by
You of the rights granted under this License if Your exercise of
such rights is for a purpose or use which is otherwise than
noncommercial as permitted under Section 4(c) and otherwise waives
the right to collect royalties through any statutory or compulsory
licensing scheme; and,
iii. Voluntary License Schemes. The Licensor reserves the right to
collect royalties, whether individually or, in the event that the
Licensor is a member of a collecting society that administers
voluntary licensing schemes, via that society, from any exercise
by You of the rights granted under this License that is for a
purpose or use which is otherwise than noncommercial as permitted
under Section 4(c).
f. Except as otherwise agreed in writing by the Licensor or as may be
otherwise permitted by applicable law, if You Reproduce, Distribute or
Publicly Perform the Work either by itself or as part of any
Adaptations or Collections, You must not distort, mutilate, modify or
take other derogatory action in relation to the Work which would be
prejudicial to the Original Author's honor or reputation. Licensor
agrees that in those jurisdictions (e.g. Japan), in which any exercise
of the right granted in Section 3(b) of this License (the right to
make Adaptations) would be deemed to be a distortion, mutilation,
modification or other derogatory action prejudicial to the Original
Author's honor and reputation, the Licensor will waive or not assert,
as appropriate, this Section, to the fullest extent permitted by the
applicable national law, to enable You to reasonably exercise Your
right under Section 3(b) of this License (right to make Adaptations)
but not otherwise.
5. Representations, Warranties and Disclaimer
UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING AND TO THE
FULLEST EXTENT PERMITTED BY APPLICABLE LAW, LICENSOR OFFERS THE WORK AS-IS
AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE
WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT
LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS,
ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT
DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED
WARRANTIES, SO THIS EXCLUSION MAY NOT APPLY TO YOU.
6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE
LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR
ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES
ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
7. Termination
a. This License and the rights granted hereunder will terminate
automatically upon any breach by You of the terms of this License.
Individuals or entities who have received Adaptations or Collections
from You under this License, however, will not have their licenses
terminated provided such individuals or entities remain in full
compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will
survive any termination of this License.
b. Subject to the above terms and conditions, the license granted here is
perpetual (for the duration of the applicable copyright in the Work).
Notwithstanding the above, Licensor reserves the right to release the
Work under different license terms or to stop distributing the Work at
any time; provided, however that any such election will not serve to
withdraw this License (or any other license that has been, or is
required to be, granted under the terms of this License), and this
License will continue in full force and effect unless terminated as
stated above.
8. Miscellaneous
a. Each time You Distribute or Publicly Perform the Work or a Collection,
the Licensor offers to the recipient a license to the Work on the same
terms and conditions as the license granted to You under this License.
b. Each time You Distribute or Publicly Perform an Adaptation, Licensor
offers to the recipient a license to the original Work on the same
terms and conditions as the license granted to You under this License.
c. If any provision of this License is invalid or unenforceable under
applicable law, it shall not affect the validity or enforceability of
the remainder of the terms of this License, and without further action
by the parties to this agreement, such provision shall be reformed to
the minimum extent necessary to make such provision valid and
enforceable.
d. No term or provision of this License shall be deemed waived and no
breach consented to unless such waiver or consent shall be in writing
and signed by the party to be charged with such waiver or consent.
e. This License constitutes the entire agreement between the parties with
respect to the Work licensed here. There are no understandings,
agreements or representations with respect to the Work not specified
here. Licensor shall not be bound by any additional provisions that
may appear in any communication from You. This License may not be
modified without the mutual written agreement of the Licensor and You.
f. The rights granted under, and the subject matter referenced, in this
License were drafted utilizing the terminology of the Berne Convention
for the Protection of Literary and Artistic Works (as amended on
September 28, 1979), the Rome Convention of 1961, the WIPO Copyright
Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996
and the Universal Copyright Convention (as revised on July 24, 1971).
These rights and subject matter take effect in the relevant
jurisdiction in which the License terms are sought to be enforced
according to the corresponding provisions of the implementation of
those treaty provisions in the applicable national law. If the
standard suite of rights granted under applicable copyright law
includes additional rights not granted under this License, such
additional rights are deemed to be included in the License; this
License is not intended to restrict the license of any rights under
applicable law.
Creative Commons Notice
Creative Commons is not a party to this License, and makes no warranty
whatsoever in connection with the Work. Creative Commons will not be
liable to You or any party on any legal theory for any damages
whatsoever, including without limitation any general, special,
incidental or consequential damages arising in connection to this
license. Notwithstanding the foregoing two (2) sentences, if Creative
Commons has expressly identified itself as the Licensor hereunder, it
shall have all rights and obligations of Licensor.
Except for the limited purpose of indicating to the public that the
Work is licensed under the CCPL, Creative Commons does not authorize
the use by either party of the trademark "Creative Commons" or any
related trademark or logo of Creative Commons without the prior
written consent of Creative Commons. Any permitted use will be in
compliance with Creative Commons' then-current trademark usage
guidelines, as may be published on its website or otherwise made
available upon request from time to time. For the avoidance of doubt,
this trademark restriction does not form part of this License.
Creative Commons may be contacted at https://creativecommons.org/.
================================================
FILE: docs/README.md
================================================
# Doctrine ORM Documentation
The documentation is written in [ReStructured Text](https://docutils.sourceforge.io/rst.html).
## How to Generate:
In the project root, run
composer docs
This will generate the documentation into the `docs/output` subdirectory.
To browse the documentation, you need to run a webserver:
cd docs/output
php -S localhost:8000
Now the documentation is available at [http://localhost:8000](http://localhost:8000).
================================================
FILE: docs/composer.json
================================================
{
"name": "doctrine/orm-docs",
"description": "Documentation for the Object-Relational Mapper\"",
"type": "library",
"license": "MIT",
"require-dev": {
"doctrine/docs-builder": "^1.0"
}
}
================================================
FILE: docs/en/cookbook/advanced-field-value-conversion-using-custom-mapping-types.rst
================================================
Advanced field value conversion using custom mapping types
==========================================================
.. sectionauthor:: Jan Sorgalla <jsorgalla@googlemail.com>
When creating entities, you sometimes have the need to transform field values
before they are saved to the database. In Doctrine you can use Custom Mapping
Types to solve this (see: :ref:`reference-basic-mapping-custom-mapping-types`).
There are several ways to achieve this: converting the value inside the Type
class, converting the value on the database-level or a combination of both.
This article describes the third way by implementing the MySQL specific column
type `Point <https://dev.mysql.com/doc/refman/8.0/en/gis-class-point.html>`_.
The ``Point`` type is part of the `Spatial extension <https://dev.mysql.com/doc/refman/8.0/en/spatial-extensions.html>`_
of MySQL and enables you to store a single location in a coordinate space by
using x and y coordinates. You can use the Point type to store a
longitude/latitude pair to represent a geographic location.
The entity
----------
We create a simple entity with a field ``$point`` which holds a value object
``Point`` representing the latitude and longitude of the position.
The entity class:
.. code-block:: php
<?php
namespace Geo\Entity;
use Geo\ValueObject\Point;
#[Entity]
class Location
{
#[Column(type: 'point')]
private Point $point;
#[Column]
private string $address;
public function setPoint(Point $point): void
{
$this->point = $point;
}
public function getPoint(): Point
{
return $this->point;
}
public function setAddress(string $address): void
{
$this->address = $address;
}
public function getAddress(): string
{
return $this->address;
}
}
We use the custom type ``point`` in the ``#[Column]`` attribute of the
``$point`` field. We will create this custom mapping type in the next chapter.
The point class:
.. code-block:: php
<?php
namespace Geo\ValueObject;
class Point
{
public function __construct(
private float $latitude,
private float $longitude,
) {
}
public function getLatitude(): float
{
return $this->latitude;
}
public function getLongitude(): float
{
return $this->longitude;
}
}
The mapping type
----------------
Now we're going to create the ``point`` type and implement all required methods.
.. code-block:: php
<?php
namespace Geo\Types;
use Doctrine\DBAL\Types\Type;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Geo\ValueObject\Point;
class PointType extends Type
{
const POINT = 'point';
public function getName()
{
return self::POINT;
}
public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
{
return 'POINT';
}
public function convertToPHPValue($value, AbstractPlatform $platform)
{
list($longitude, $latitude) = sscanf($value, 'POINT(%f %f)');
return new Point($latitude, $longitude);
}
public function convertToDatabaseValue($value, AbstractPlatform $platform)
{
if ($value instanceof Point) {
$value = sprintf('POINT(%F %F)', $value->getLongitude(), $value->getLatitude());
}
return $value;
}
public function convertToPHPValueSQL($sqlExpr, AbstractPlatform $platform)
{
return sprintf('AsText(%s)', $sqlExpr);
}
public function convertToDatabaseValueSQL($sqlExpr, AbstractPlatform $platform)
{
return sprintf('PointFromText(%s)', $sqlExpr);
}
}
We do a 2-step conversion here. In the first step, we convert the ``Point``
object into a string representation before saving to the database (in the
``convertToDatabaseValue`` method) and back into an object after fetching the
value from the database (in the ``convertToPHPValue`` method).
The format of the string representation format is called
`Well-known text (WKT) <https://en.wikipedia.org/wiki/Well-known_text>`_.
The advantage of this format is, that it is both human readable and parsable by MySQL.
Internally, MySQL stores geometry values in a binary format that is not
identical to the WKT format. So, we need to let MySQL transform the WKT
representation into its internal format.
This is where the ``convertToPHPValueSQL`` and ``convertToDatabaseValueSQL``
methods come into play.
This methods wrap a sql expression (the WKT representation of the Point) into
MySQL functions `ST_PointFromText <https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html#function_st-pointfromtext>`_
and `ST_AsText <https://dev.mysql.com/doc/refman/8.0/en/gis-format-conversion-functions.html#function_st-astext>`_
which convert WKT strings to and from the internal format of MySQL.
.. note::
When using DQL queries, the ``convertToPHPValueSQL`` and
``convertToDatabaseValueSQL`` methods only apply to identification variables
and path expressions in SELECT clauses. Expressions in WHERE clauses are
**not** wrapped!
If you want to use Point values in WHERE clauses, you have to implement a
:doc:`user defined function <dql-user-defined-functions>` for
``PointFromText``.
Example usage
-------------
.. code-block:: php
<?php
// Bootstrapping stuff...
// $em = new \Doctrine\ORM\EntityManager($connection, $config);
// Setup custom mapping type
use Doctrine\DBAL\Types\Type;
Type::addType('point', 'Geo\Types\PointType');
$em->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping('point', 'point');
// Store a Location object
use Geo\Entity\Location;
use Geo\ValueObject\Point;
$location = new Location();
$location->setAddress('1600 Amphitheatre Parkway, Mountain View, CA');
$location->setPoint(new Point(37.4220761, -122.0845187));
$em->persist($location);
$em->flush();
$em->clear();
// Fetch the Location object
$query = $em->createQuery("SELECT l FROM Geo\Entity\Location l WHERE l.address = '1600 Amphitheatre Parkway, Mountain View, CA'");
$location = $query->getSingleResult();
/** @var Geo\ValueObject\Point */
$point = $location->getPoint();
================================================
FILE: docs/en/cookbook/aggregate-fields.rst
================================================
Aggregate Fields
================
.. sectionauthor:: Benjamin Eberlei <kontakt@beberlei.de>
You will often come across the requirement to display aggregate
values of data that can be computed by using the MIN, MAX, COUNT or
SUM SQL functions. For any ORM this is a tricky issue
traditionally. Doctrine ORM offers several ways to get access to
these values and this article will describe all of them from
different perspectives.
You will see that aggregate fields can become very explicit
features in your domain model and how this potentially complex
business rules can be easily tested.
An example model
----------------
Say you want to model a bank account and all their entries. Entries
into the account can either be of positive or negative money
values. Each account has a credit limit and the account is never
allowed to have a balance below that value.
For simplicity we live in a world where money is composed of
integers only. Also we omit the receiver/sender name, stated reason
for transfer and the execution date. These all would have to be
added on the ``Entry`` object.
Our entities look like:
.. code-block:: php
<?php
namespace Bank\Entities;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
#[ORM\Entity]
class Account
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
private ?int $id;
#[ORM\OneToMany(targetEntity: Entry::class, mappedBy: 'account', cascade: ['persist'])]
private Collection $entries;
public function __construct(
#[ORM\Column(type: 'string', unique: true)]
private string $no,
#[ORM\Column(type: 'integer')]
private int $maxCredit = 0,
) {
$this->entries = new ArrayCollection();
}
}
#[ORM\Entity]
class Entry
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
private ?int $id;
public function __construct(
#[ORM\ManyToOne(targetEntity: Account::class, inversedBy: 'entries')]
private Account $account,
#[ORM\Column(type: 'integer')]
private int $amount,
) {
// more stuff here, from/to whom, stated reason, execution date and such
}
public function getAmount(): Amount
{
return $this->amount;
}
}
Using DQL
---------
The Doctrine Query Language allows you to select for aggregate
values computed from fields of your Domain Model. You can select
the current balance of your account by calling:
.. code-block:: php
<?php
$dql = "SELECT SUM(e.amount) AS balance FROM Bank\Entities\Entry e " .
"WHERE e.account = ?1";
$balance = $em->createQuery($dql)
->setParameter(1, $myAccountId)
->getSingleScalarResult();
The ``$em`` variable in this (and forthcoming) example holds the
Doctrine ``EntityManager``. We create a query for the SUM of all
amounts (negative amounts are withdraws) and retrieve them as a
single scalar result, essentially return only the first column of
the first row.
This approach is simple and powerful, however it has a serious
drawback. We have to execute a specific query for the balance
whenever we need it.
To implement a powerful domain model we would rather have access to
the balance from our ``Account`` entity during all times (even if
the Account was not persisted in the database before!).
Also an additional requirement is the max credit per ``Account``
rule.
We cannot reliably enforce this rule in our ``Account`` entity with
the DQL retrieval of the balance. There are many different ways to
retrieve accounts. We cannot guarantee that we can execute the
aggregation query for all these use-cases, let alone that a
userland programmer checks this balance against newly added
entries.
Using your Domain Model
-----------------------
``Account`` and all the ``Entry`` instances are connected through a
collection, which means we can compute this value at runtime:
.. code-block:: php
<?php
class Account
{
// .. previous code
public function getBalance(): int
{
$balance = 0;
foreach ($this->entries as $entry) {
$balance += $entry->getAmount();
}
return $balance;
}
}
Now we can always call ``Account::getBalance()`` to access the
current account balance.
To enforce the max credit rule we have to implement the "Aggregate
Root" pattern as described in Eric Evans book on Domain Driven
Design. Described with one sentence, an aggregate root controls the
instance creation, access and manipulation of its children.
In our case we want to enforce that new entries can only added to
the ``Account`` by using a designated method. The ``Account`` is
the aggregate root of this relation. We can also enforce the
correctness of the bi-directional ``Account`` <-> ``Entry``
relation with this method:
.. code-block:: php
<?php
class Account
{
public function addEntry(int $amount): void
{
$this->assertAcceptEntryAllowed($amount);
$this->entries[] = new Entry($this, $amount);
}
}
Now look at the following test-code for our entities:
.. code-block:: php
<?php
use PHPUnit\Framework\TestCase;
class AccountTest extends TestCase
{
public function testAddEntry()
{
$account = new Account("123456", maxCredit: 200);
$this->assertEquals(0, $account->getBalance());
$account->addEntry(500);
$this->assertEquals(500, $account->getBalance());
$account->addEntry(-700);
$this->assertEquals(-200, $account->getBalance());
}
public function testExceedMaxLimit()
{
$account = new Account("123456", maxCredit: 200);
$this->expectException(Exception::class);
$account->addEntry(-1000);
}
}
To enforce our rule we can now implement the assertion in
``Account::addEntry``:
.. code-block:: php
<?php
class Account
{
// .. previous code
private function assertAcceptEntryAllowed(int $amount): void
{
$futureBalance = $this->getBalance() + $amount;
$allowedMinimalBalance = ($this->maxCredit * -1);
if ($futureBalance < $allowedMinimalBalance) {
throw new Exception("Credit Limit exceeded, entry is not allowed!");
}
}
}
We haven't talked to the entity manager for persistence of our
account example before. You can call
``EntityManager::persist($account)`` and then
``EntityManager::flush()`` at any point to save the account to the
database. All the nested ``Entry`` objects are automatically
flushed to the database also.
.. code-block:: php
<?php
$account = new Account("123456", 200);
$account->addEntry(500);
$account->addEntry(-200);
$em->persist($account);
$em->flush();
The current implementation has a considerable drawback. To get the
balance, we have to initialize the complete ``Account::$entries``
collection, possibly a very large one. This can considerably hurt
the performance of your application.
Using an Aggregate Field
------------------------
To overcome the previously mentioned issue (initializing the whole
entries collection) we want to add an aggregate field called
"balance" on the Account and adjust the code in
``Account::getBalance()`` and ``Account:addEntry()``:
.. code-block:: php
<?php
class Account
{
#[ORM\Column(type: 'integer')]
private int $balance = 0;
public function getBalance(): int
{
return $this->balance;
}
public function addEntry(int $amount): void
{
$this->assertAcceptEntryAllowed($amount);
$this->entries[] = new Entry($this, $amount);
$this->balance += $amount;
}
}
This is a very simple change, but all the tests still pass. Our
account entities return the correct balance. Now calling the
``Account::getBalance()`` method will not occur the overhead of
loading all entries anymore. Adding a new Entry to the
``Account::$entities`` will also not initialize the collection
internally.
Adding a new entry is therefore very performant and explicitly
hooked into the domain model. It will only update the account with
the current balance and insert the new entry into the database.
Tackling Race Conditions with Aggregate Fields
----------------------------------------------
Whenever you denormalize your database schema race-conditions can
potentially lead to inconsistent state. See this example:
.. code-block:: php
<?php
use Bank\Entities\Account;
// The Account $accId has a balance of 0 and a max credit limit of 200:
// request 1 account
$account1 = $em->find(Account::class, $accId);
// request 2 account
$account2 = $em->find(Account::class, $accId);
$account1->addEntry(-200);
$account2->addEntry(-200);
// now request 1 and 2 both flush the changes.
The aggregate field ``Account::$balance`` is now -200, however the
SUM over all entries amounts yields -400. A violation of our max
credit rule.
You can use both optimistic or pessimistic locking to safe-guard
your aggregate fields against this kind of race-conditions. Reading
Eric Evans DDD carefully he mentions that the "Aggregate Root"
(Account in our example) needs a locking mechanism.
Optimistic locking is as easy as adding a version column:
.. code-block:: php
<?php
class Account
{
#[ORM\Column(type: 'integer')]
#[ORM\Version]
private int $version;
}
The previous example would then throw an exception in the face of
whatever request saves the entity last (and would create the
inconsistent state).
Pessimistic locking requires an additional flag set on the
``EntityManager::find()`` call, enabling write locking directly in
the database using a FOR UPDATE.
.. code-block:: php
<?php
use Bank\Entities\Account;
use Doctrine\DBAL\LockMode;
$account = $em->find(Account::class, $accId, LockMode::PESSIMISTIC_WRITE);
Keeping Updates and Deletes in Sync
-----------------------------------
The example shown in this article does not allow changes to the
value in ``Entry``, which considerably simplifies the effort to
keep ``Account::$balance`` in sync. If your use-case allows fields
to be updated or related entities to be removed you have to
encapsulate this logic in your "Aggregate Root" entity and adjust
the aggregate field accordingly.
Conclusion
----------
This article described how to obtain aggregate values using DQL or
your domain model. It showed how you can easily add an aggregate
field that offers serious performance benefits over iterating all
the related objects that make up an aggregate value. Finally I
showed how you can ensure that your aggregate fields do not get out
of sync due to race-conditions and concurrent access.
================================================
FILE: docs/en/cookbook/custom-mapping-types.rst
================================================
Custom Mapping Types
====================
Doctrine allows you to create new mapping types. This can come in
handy when you're missing a specific mapping type or when you want
to replace the existing implementation of a mapping type.
In order to create a new mapping type you need to subclass
``Doctrine\DBAL\Types\Type`` and implement/override the methods as
you wish. Here is an example skeleton of such a custom type class:
.. code-block:: php
<?php
namespace My\Project\Types;
use Doctrine\DBAL\Types\Type;
use Doctrine\DBAL\Platforms\AbstractPlatform;
/**
* My custom datatype.
*/
class MyType extends Type
{
const MYTYPE = 'mytype'; // modify to match your type name
public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
{
// return the SQL used to create your column type. To create a portable column type, use the $platform.
}
public function convertToPHPValue($value, AbstractPlatform $platform)
{
// This is executed when the value is read from the database. Make your conversions here, optionally using the $platform.
}
public function convertToDatabaseValue($value, AbstractPlatform $platform)
{
// This is executed when the value is written to the database. Make your conversions here, optionally using the $platform.
}
public function getName()
{
return self::MYTYPE; // modify to match your constant name
}
}
.. note::
The following assumptions are applied to mapping types by the ORM:
- The ``UnitOfWork`` never passes values to the database convert
method that did not change in the request.
- The ``UnitOfWork`` internally assumes that entity identifiers are
castable to string. Hence, when using custom types that map to PHP
objects as IDs, such objects must implement the ``__toString()`` magic
method.
When you have implemented the type you still need to let Doctrine
know about it. This can be achieved through the
``Doctrine\DBAL\Types\Type#addType($name, $className)``
method. See the following example:
.. code-block:: php
<?php
// in bootstrapping code
// ...
use Doctrine\DBAL\Types\Type;
// ...
// Register my type
Type::addType('mytype', 'My\Project\Types\MyType');
To convert the underlying database type of your
new "mytype" directly into an i
gitextract_zhimkn3r/
├── .doctrine-project.json
├── .gitattributes
├── .github/
│ ├── PULL_REQUEST_TEMPLATE/
│ │ ├── Failing_Test.md
│ │ ├── Improvement.md
│ │ └── New_Feature.md
│ ├── dependabot.yml
│ └── workflows/
│ ├── coding-standards.yml
│ ├── composer-lint.yml
│ ├── continuous-integration.yml
│ ├── documentation.yml
│ ├── phpbench.yml
│ ├── release-on-milestone-closed.yml
│ ├── stale.yml
│ ├── static-analysis.yml
│ └── website-schema.yml
├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── UPGRADE.md
├── ci/
│ └── github/
│ └── phpunit/
│ ├── mysqli.xml
│ ├── pdo_mysql.xml
│ ├── pdo_pgsql.xml
│ ├── pdo_sqlite.xml
│ ├── pgsql.xml
│ └── sqlite3.xml
├── composer.json
├── docs/
│ ├── .gitignore
│ ├── LICENSE.md
│ ├── README.md
│ ├── composer.json
│ └── en/
│ ├── cookbook/
│ │ ├── advanced-field-value-conversion-using-custom-mapping-types.rst
│ │ ├── aggregate-fields.rst
│ │ ├── custom-mapping-types.rst
│ │ ├── decorator-pattern.rst
│ │ ├── dql-custom-walkers/
│ │ │ └── InterpolateParametersSQLOutputWalker.php
│ │ ├── dql-custom-walkers.rst
│ │ ├── dql-user-defined-functions.rst
│ │ ├── entities-in-session.rst
│ │ ├── generated-columns/
│ │ │ ├── Article.php
│ │ │ └── Person.php
│ │ ├── generated-columns.rst
│ │ ├── implementing-arrayaccess-for-domain-objects.rst
│ │ ├── mysql-enums.rst
│ │ ├── resolve-target-entity-listener.rst
│ │ ├── sql-table-prefixes.rst
│ │ ├── strategy-cookbook-introduction.rst
│ │ ├── validation-of-entities.rst
│ │ └── working-with-datetime.rst
│ ├── index.rst
│ ├── reference/
│ │ ├── advanced-configuration.rst
│ │ ├── architecture.rst
│ │ ├── association-mapping.rst
│ │ ├── attributes-reference.rst
│ │ ├── basic-mapping/
│ │ │ ├── DefaultValues.php
│ │ │ └── default-values.xml
│ │ ├── basic-mapping.rst
│ │ ├── batch-processing.rst
│ │ ├── best-practices.rst
│ │ ├── caching.rst
│ │ ├── change-tracking-policies.rst
│ │ ├── configuration.rst
│ │ ├── dql-doctrine-query-language.rst
│ │ ├── events.rst
│ │ ├── faq.rst
│ │ ├── filters.rst
│ │ ├── improving-performance.rst
│ │ ├── inheritance-mapping.rst
│ │ ├── installation.rst
│ │ ├── limitations-and-known-issues.rst
│ │ ├── metadata-drivers.rst
│ │ ├── namingstrategy.rst
│ │ ├── native-sql.rst
│ │ ├── partial-hydration.rst
│ │ ├── partial-objects.rst
│ │ ├── php-mapping.rst
│ │ ├── query-builder.rst
│ │ ├── second-level-cache.rst
│ │ ├── security.rst
│ │ ├── tools.rst
│ │ ├── transactions-and-concurrency.rst
│ │ ├── typedfieldmapper.rst
│ │ ├── unitofwork-associations.rst
│ │ ├── unitofwork.rst
│ │ ├── working-with-associations.rst
│ │ ├── working-with-objects.rst
│ │ └── xml-mapping.rst
│ ├── sidebar.rst
│ └── tutorials/
│ ├── composite-primary-keys.rst
│ ├── embeddables.rst
│ ├── extra-lazy-associations.rst
│ ├── getting-started.rst
│ ├── ordered-associations.rst
│ ├── override-field-association-mappings-in-subclasses.rst
│ ├── pagination.rst
│ ├── working-with-indexed-associations/
│ │ ├── Market.php
│ │ └── market.xml
│ └── working-with-indexed-associations.rst
├── doctrine-mapping.xsd
├── phpbench.json
├── phpcs.xml.dist
├── phpstan-baseline.neon
├── phpstan-dbal3.neon
├── phpstan-params.neon
├── phpstan.neon
├── phpunit.xml.dist
├── src/
│ ├── AbstractQuery.php
│ ├── Cache/
│ │ ├── AssociationCacheEntry.php
│ │ ├── CacheConfiguration.php
│ │ ├── CacheEntry.php
│ │ ├── CacheException.php
│ │ ├── CacheFactory.php
│ │ ├── CacheKey.php
│ │ ├── CollectionCacheEntry.php
│ │ ├── CollectionCacheKey.php
│ │ ├── CollectionHydrator.php
│ │ ├── ConcurrentRegion.php
│ │ ├── DefaultCache.php
│ │ ├── DefaultCacheFactory.php
│ │ ├── DefaultCollectionHydrator.php
│ │ ├── DefaultEntityHydrator.php
│ │ ├── DefaultQueryCache.php
│ │ ├── EntityCacheEntry.php
│ │ ├── EntityCacheKey.php
│ │ ├── EntityHydrator.php
│ │ ├── Exception/
│ │ │ ├── CacheException.php
│ │ │ ├── CannotUpdateReadOnlyCollection.php
│ │ │ ├── CannotUpdateReadOnlyEntity.php
│ │ │ ├── FeatureNotImplemented.php
│ │ │ ├── NonCacheableEntity.php
│ │ │ └── NonCacheableEntityAssociation.php
│ │ ├── Lock.php
│ │ ├── LockException.php
│ │ ├── Logging/
│ │ │ ├── CacheLogger.php
│ │ │ ├── CacheLoggerChain.php
│ │ │ └── StatisticsCacheLogger.php
│ │ ├── Persister/
│ │ │ ├── CachedPersister.php
│ │ │ ├── Collection/
│ │ │ │ ├── AbstractCollectionPersister.php
│ │ │ │ ├── CachedCollectionPersister.php
│ │ │ │ ├── NonStrictReadWriteCachedCollectionPersister.php
│ │ │ │ ├── ReadOnlyCachedCollectionPersister.php
│ │ │ │ └── ReadWriteCachedCollectionPersister.php
│ │ │ └── Entity/
│ │ │ ├── AbstractEntityPersister.php
│ │ │ ├── CachedEntityPersister.php
│ │ │ ├── NonStrictReadWriteCachedEntityPersister.php
│ │ │ ├── ReadOnlyCachedEntityPersister.php
│ │ │ └── ReadWriteCachedEntityPersister.php
│ │ ├── QueryCache.php
│ │ ├── QueryCacheEntry.php
│ │ ├── QueryCacheKey.php
│ │ ├── QueryCacheValidator.php
│ │ ├── Region/
│ │ │ ├── DefaultRegion.php
│ │ │ ├── FileLockRegion.php
│ │ │ └── UpdateTimestampCache.php
│ │ ├── Region.php
│ │ ├── RegionsConfiguration.php
│ │ ├── TimestampCacheEntry.php
│ │ ├── TimestampCacheKey.php
│ │ ├── TimestampQueryCacheValidator.php
│ │ └── TimestampRegion.php
│ ├── Cache.php
│ ├── Configuration.php
│ ├── Decorator/
│ │ └── EntityManagerDecorator.php
│ ├── EntityManager.php
│ ├── EntityManagerInterface.php
│ ├── EntityNotFoundException.php
│ ├── EntityRepository.php
│ ├── Event/
│ │ ├── ListenersInvoker.php
│ │ ├── LoadClassMetadataEventArgs.php
│ │ ├── OnClassMetadataNotFoundEventArgs.php
│ │ ├── OnClearEventArgs.php
│ │ ├── OnFlushEventArgs.php
│ │ ├── PostFlushEventArgs.php
│ │ ├── PostLoadEventArgs.php
│ │ ├── PostPersistEventArgs.php
│ │ ├── PostRemoveEventArgs.php
│ │ ├── PostUpdateEventArgs.php
│ │ ├── PreFlushEventArgs.php
│ │ ├── PrePersistEventArgs.php
│ │ ├── PreRemoveEventArgs.php
│ │ └── PreUpdateEventArgs.php
│ ├── Events.php
│ ├── Exception/
│ │ ├── ConfigurationException.php
│ │ ├── DuplicateFieldException.php
│ │ ├── EntityIdentityCollisionException.php
│ │ ├── EntityManagerClosed.php
│ │ ├── EntityMissingAssignedId.php
│ │ ├── InvalidEntityRepository.php
│ │ ├── InvalidHydrationMode.php
│ │ ├── ManagerException.php
│ │ ├── MissingIdentifierField.php
│ │ ├── MissingMappingDriverImplementation.php
│ │ ├── MultipleSelectorsFoundException.php
│ │ ├── NoMatchingPropertyException.php
│ │ ├── NotSupported.php
│ │ ├── ORMException.php
│ │ ├── PersisterException.php
│ │ ├── RepositoryException.php
│ │ ├── SchemaToolException.php
│ │ ├── UnexpectedAssociationValue.php
│ │ └── UnrecognizedIdentifierFields.php
│ ├── Id/
│ │ ├── AbstractIdGenerator.php
│ │ ├── AssignedGenerator.php
│ │ ├── BigIntegerIdentityGenerator.php
│ │ ├── IdentityGenerator.php
│ │ └── SequenceGenerator.php
│ ├── Internal/
│ │ ├── Hydration/
│ │ │ ├── AbstractHydrator.php
│ │ │ ├── ArrayHydrator.php
│ │ │ ├── HydrationException.php
│ │ │ ├── ObjectHydrator.php
│ │ │ ├── ScalarColumnHydrator.php
│ │ │ ├── ScalarHydrator.php
│ │ │ ├── SimpleObjectHydrator.php
│ │ │ └── SingleScalarHydrator.php
│ │ ├── HydrationCompleteHandler.php
│ │ ├── NoUnknownNamedArguments.php
│ │ ├── SQLResultCasing.php
│ │ ├── StronglyConnectedComponents.php
│ │ ├── TopologicalSort/
│ │ │ └── CycleDetectedException.php
│ │ ├── TopologicalSort.php
│ │ └── UnitOfWork/
│ │ └── InsertBatch.php
│ ├── LazyCriteriaCollection.php
│ ├── Mapping/
│ │ ├── AnsiQuoteStrategy.php
│ │ ├── ArrayAccessImplementation.php
│ │ ├── AssociationMapping.php
│ │ ├── AssociationOverride.php
│ │ ├── AssociationOverrides.php
│ │ ├── AttributeOverride.php
│ │ ├── AttributeOverrides.php
│ │ ├── Builder/
│ │ │ ├── AssociationBuilder.php
│ │ │ ├── ClassMetadataBuilder.php
│ │ │ ├── EmbeddedBuilder.php
│ │ │ ├── EntityListenerBuilder.php
│ │ │ ├── FieldBuilder.php
│ │ │ ├── ManyToManyAssociationBuilder.php
│ │ │ └── OneToManyAssociationBuilder.php
│ │ ├── Cache.php
│ │ ├── ChainTypedFieldMapper.php
│ │ ├── ChangeTrackingPolicy.php
│ │ ├── ClassMetadata.php
│ │ ├── ClassMetadataFactory.php
│ │ ├── Column.php
│ │ ├── CustomIdGenerator.php
│ │ ├── DefaultEntityListenerResolver.php
│ │ ├── DefaultNamingStrategy.php
│ │ ├── DefaultQuoteStrategy.php
│ │ ├── DefaultTypedFieldMapper.php
│ │ ├── DiscriminatorColumn.php
│ │ ├── DiscriminatorColumnMapping.php
│ │ ├── DiscriminatorMap.php
│ │ ├── Driver/
│ │ │ ├── AttributeDriver.php
│ │ │ ├── AttributeReader.php
│ │ │ ├── DatabaseDriver.php
│ │ │ ├── LoadMappingFileImplementation.php
│ │ │ ├── ReflectionBasedDriver.php
│ │ │ ├── RepeatableAttributeCollection.php
│ │ │ ├── SimplifiedXmlDriver.php
│ │ │ └── XmlDriver.php
│ │ ├── Embeddable.php
│ │ ├── Embedded.php
│ │ ├── EmbeddedClassMapping.php
│ │ ├── Entity.php
│ │ ├── EntityListenerResolver.php
│ │ ├── EntityListeners.php
│ │ ├── Exception/
│ │ │ ├── InvalidCustomGenerator.php
│ │ │ └── UnknownGeneratorType.php
│ │ ├── FieldMapping.php
│ │ ├── GeneratedValue.php
│ │ ├── GetReflectionClassImplementation.php
│ │ ├── HasLifecycleCallbacks.php
│ │ ├── Id.php
│ │ ├── Index.php
│ │ ├── InheritanceType.php
│ │ ├── InverseJoinColumn.php
│ │ ├── InverseSideMapping.php
│ │ ├── JoinColumn.php
│ │ ├── JoinColumnMapping.php
│ │ ├── JoinColumnProperties.php
│ │ ├── JoinColumns.php
│ │ ├── JoinTable.php
│ │ ├── JoinTableMapping.php
│ │ ├── LegacyReflectionFields.php
│ │ ├── ManyToMany.php
│ │ ├── ManyToManyAssociationMapping.php
│ │ ├── ManyToManyInverseSideMapping.php
│ │ ├── ManyToManyOwningSideMapping.php
│ │ ├── ManyToOne.php
│ │ ├── ManyToOneAssociationMapping.php
│ │ ├── MappedSuperclass.php
│ │ ├── MappingAttribute.php
│ │ ├── MappingException.php
│ │ ├── NamingStrategy.php
│ │ ├── OneToMany.php
│ │ ├── OneToManyAssociationMapping.php
│ │ ├── OneToOne.php
│ │ ├── OneToOneAssociationMapping.php
│ │ ├── OneToOneInverseSideMapping.php
│ │ ├── OneToOneOwningSideMapping.php
│ │ ├── OrderBy.php
│ │ ├── OwningSideMapping.php
│ │ ├── PostLoad.php
│ │ ├── PostPersist.php
│ │ ├── PostRemove.php
│ │ ├── PostUpdate.php
│ │ ├── PreFlush.php
│ │ ├── PrePersist.php
│ │ ├── PreRemove.php
│ │ ├── PreUpdate.php
│ │ ├── PropertyAccessors/
│ │ │ ├── EmbeddablePropertyAccessor.php
│ │ │ ├── EnumPropertyAccessor.php
│ │ │ ├── ObjectCastPropertyAccessor.php
│ │ │ ├── PropertyAccessor.php
│ │ │ ├── PropertyAccessorFactory.php
│ │ │ ├── RawValuePropertyAccessor.php
│ │ │ ├── ReadonlyAccessor.php
│ │ │ └── TypedNoDefaultPropertyAccessor.php
│ │ ├── QuoteStrategy.php
│ │ ├── ReflectionEmbeddedProperty.php
│ │ ├── ReflectionEnumProperty.php
│ │ ├── ReflectionReadonlyProperty.php
│ │ ├── SequenceGenerator.php
│ │ ├── Table.php
│ │ ├── ToManyAssociationMapping.php
│ │ ├── ToManyAssociationMappingImplementation.php
│ │ ├── ToManyInverseSideMapping.php
│ │ ├── ToManyOwningSideMapping.php
│ │ ├── ToOneAssociationMapping.php
│ │ ├── ToOneInverseSideMapping.php
│ │ ├── ToOneOwningSideMapping.php
│ │ ├── TypedFieldMapper.php
│ │ ├── UnderscoreNamingStrategy.php
│ │ ├── UniqueConstraint.php
│ │ └── Version.php
│ ├── NativeQuery.php
│ ├── NoResultException.php
│ ├── NonUniqueResultException.php
│ ├── ORMInvalidArgumentException.php
│ ├── ORMSetup.php
│ ├── OptimisticLockException.php
│ ├── PersistentCollection.php
│ ├── Persisters/
│ │ ├── Collection/
│ │ │ ├── AbstractCollectionPersister.php
│ │ │ ├── CollectionPersister.php
│ │ │ ├── ManyToManyPersister.php
│ │ │ └── OneToManyPersister.php
│ │ ├── Entity/
│ │ │ ├── AbstractEntityInheritancePersister.php
│ │ │ ├── BasicEntityPersister.php
│ │ │ ├── CachedPersisterContext.php
│ │ │ ├── EntityPersister.php
│ │ │ ├── JoinedSubclassPersister.php
│ │ │ └── SingleTablePersister.php
│ │ ├── Exception/
│ │ │ ├── CantUseInOperatorOnCompositeKeys.php
│ │ │ ├── InvalidOrientation.php
│ │ │ └── UnrecognizedField.php
│ │ ├── MatchingAssociationFieldRequiresObject.php
│ │ ├── PersisterException.php
│ │ ├── SqlExpressionVisitor.php
│ │ └── SqlValueVisitor.php
│ ├── PessimisticLockException.php
│ ├── Proxy/
│ │ ├── Autoloader.php
│ │ ├── DefaultProxyClassNameResolver.php
│ │ ├── InternalProxy.php
│ │ ├── NotAProxyClass.php
│ │ └── ProxyFactory.php
│ ├── Query/
│ │ ├── AST/
│ │ │ ├── ASTException.php
│ │ │ ├── AggregateExpression.php
│ │ │ ├── ArithmeticExpression.php
│ │ │ ├── ArithmeticFactor.php
│ │ │ ├── ArithmeticTerm.php
│ │ │ ├── BetweenExpression.php
│ │ │ ├── CoalesceExpression.php
│ │ │ ├── CollectionMemberExpression.php
│ │ │ ├── ComparisonExpression.php
│ │ │ ├── ConditionalExpression.php
│ │ │ ├── ConditionalFactor.php
│ │ │ ├── ConditionalPrimary.php
│ │ │ ├── ConditionalTerm.php
│ │ │ ├── DeleteClause.php
│ │ │ ├── DeleteStatement.php
│ │ │ ├── EmptyCollectionComparisonExpression.php
│ │ │ ├── EntityAsDtoArgumentExpression.php
│ │ │ ├── ExistsExpression.php
│ │ │ ├── FromClause.php
│ │ │ ├── Functions/
│ │ │ │ ├── AbsFunction.php
│ │ │ │ ├── AvgFunction.php
│ │ │ │ ├── BitAndFunction.php
│ │ │ │ ├── BitOrFunction.php
│ │ │ │ ├── ConcatFunction.php
│ │ │ │ ├── CountFunction.php
│ │ │ │ ├── CurrentDateFunction.php
│ │ │ │ ├── CurrentTimeFunction.php
│ │ │ │ ├── CurrentTimestampFunction.php
│ │ │ │ ├── DateAddFunction.php
│ │ │ │ ├── DateDiffFunction.php
│ │ │ │ ├── DateSubFunction.php
│ │ │ │ ├── FunctionNode.php
│ │ │ │ ├── IdentityFunction.php
│ │ │ │ ├── LengthFunction.php
│ │ │ │ ├── LocateFunction.php
│ │ │ │ ├── LowerFunction.php
│ │ │ │ ├── MaxFunction.php
│ │ │ │ ├── MinFunction.php
│ │ │ │ ├── ModFunction.php
│ │ │ │ ├── SizeFunction.php
│ │ │ │ ├── SqrtFunction.php
│ │ │ │ ├── SubstringFunction.php
│ │ │ │ ├── SumFunction.php
│ │ │ │ ├── TrimFunction.php
│ │ │ │ └── UpperFunction.php
│ │ │ ├── GeneralCaseExpression.php
│ │ │ ├── GroupByClause.php
│ │ │ ├── HavingClause.php
│ │ │ ├── IdentificationVariableDeclaration.php
│ │ │ ├── InListExpression.php
│ │ │ ├── InSubselectExpression.php
│ │ │ ├── IndexBy.php
│ │ │ ├── InputParameter.php
│ │ │ ├── InstanceOfExpression.php
│ │ │ ├── Join.php
│ │ │ ├── JoinAssociationDeclaration.php
│ │ │ ├── JoinAssociationPathExpression.php
│ │ │ ├── JoinClassPathExpression.php
│ │ │ ├── JoinVariableDeclaration.php
│ │ │ ├── LikeExpression.php
│ │ │ ├── Literal.php
│ │ │ ├── NewObjectExpression.php
│ │ │ ├── Node.php
│ │ │ ├── NullComparisonExpression.php
│ │ │ ├── NullIfExpression.php
│ │ │ ├── OrderByClause.php
│ │ │ ├── OrderByItem.php
│ │ │ ├── ParenthesisExpression.php
│ │ │ ├── PartialObjectExpression.php
│ │ │ ├── PathExpression.php
│ │ │ ├── Phase2OptimizableConditional.php
│ │ │ ├── QuantifiedExpression.php
│ │ │ ├── RangeVariableDeclaration.php
│ │ │ ├── SelectClause.php
│ │ │ ├── SelectExpression.php
│ │ │ ├── SelectStatement.php
│ │ │ ├── SimpleArithmeticExpression.php
│ │ │ ├── SimpleCaseExpression.php
│ │ │ ├── SimpleSelectClause.php
│ │ │ ├── SimpleSelectExpression.php
│ │ │ ├── SimpleWhenClause.php
│ │ │ ├── Subselect.php
│ │ │ ├── SubselectFromClause.php
│ │ │ ├── SubselectIdentificationVariableDeclaration.php
│ │ │ ├── TypedExpression.php
│ │ │ ├── UpdateClause.php
│ │ │ ├── UpdateItem.php
│ │ │ ├── UpdateStatement.php
│ │ │ ├── WhenClause.php
│ │ │ └── WhereClause.php
│ │ ├── Exec/
│ │ │ ├── AbstractSqlExecutor.php
│ │ │ ├── FinalizedSelectExecutor.php
│ │ │ ├── MultiTableDeleteExecutor.php
│ │ │ ├── MultiTableUpdateExecutor.php
│ │ │ ├── PreparedExecutorFinalizer.php
│ │ │ ├── SingleSelectExecutor.php
│ │ │ ├── SingleSelectSqlFinalizer.php
│ │ │ ├── SingleTableDeleteUpdateExecutor.php
│ │ │ └── SqlFinalizer.php
│ │ ├── Expr/
│ │ │ ├── Andx.php
│ │ │ ├── Base.php
│ │ │ ├── Comparison.php
│ │ │ ├── Composite.php
│ │ │ ├── From.php
│ │ │ ├── Func.php
│ │ │ ├── GroupBy.php
│ │ │ ├── Join.php
│ │ │ ├── Literal.php
│ │ │ ├── Math.php
│ │ │ ├── OrderBy.php
│ │ │ ├── Orx.php
│ │ │ └── Select.php
│ │ ├── Expr.php
│ │ ├── Filter/
│ │ │ ├── FilterException.php
│ │ │ ├── Parameter.php
│ │ │ └── SQLFilter.php
│ │ ├── FilterCollection.php
│ │ ├── Lexer.php
│ │ ├── OutputWalker.php
│ │ ├── Parameter.php
│ │ ├── ParameterTypeInferer.php
│ │ ├── Parser.php
│ │ ├── ParserResult.php
│ │ ├── Printer.php
│ │ ├── QueryException.php
│ │ ├── QueryExpressionVisitor.php
│ │ ├── ResultSetMapping.php
│ │ ├── ResultSetMappingBuilder.php
│ │ ├── SqlOutputWalker.php
│ │ ├── SqlWalker.php
│ │ ├── TokenType.php
│ │ ├── TreeWalker.php
│ │ ├── TreeWalkerAdapter.php
│ │ └── TreeWalkerChain.php
│ ├── Query.php
│ ├── QueryBuilder.php
│ ├── QueryType.php
│ ├── Repository/
│ │ ├── DefaultRepositoryFactory.php
│ │ ├── Exception/
│ │ │ ├── InvalidFindByCall.php
│ │ │ └── InvalidMagicMethodCall.php
│ │ └── RepositoryFactory.php
│ ├── Tools/
│ │ ├── AttachEntityListenersListener.php
│ │ ├── Console/
│ │ │ ├── ApplicationCompatibility.php
│ │ │ ├── Command/
│ │ │ │ ├── AbstractEntityManagerCommand.php
│ │ │ │ ├── ClearCache/
│ │ │ │ │ ├── CollectionRegionCommand.php
│ │ │ │ │ ├── EntityRegionCommand.php
│ │ │ │ │ ├── MetadataCommand.php
│ │ │ │ │ ├── QueryCommand.php
│ │ │ │ │ ├── QueryRegionCommand.php
│ │ │ │ │ └── ResultCommand.php
│ │ │ │ ├── Debug/
│ │ │ │ │ ├── AbstractCommand.php
│ │ │ │ │ ├── DebugEntityListenersDoctrineCommand.php
│ │ │ │ │ └── DebugEventManagerDoctrineCommand.php
│ │ │ │ ├── GenerateProxiesCommand.php
│ │ │ │ ├── InfoCommand.php
│ │ │ │ ├── MappingDescribeCommand.php
│ │ │ │ ├── MappingDescribeCommandFormat.php
│ │ │ │ ├── RunDqlCommand.php
│ │ │ │ ├── SchemaTool/
│ │ │ │ │ ├── AbstractCommand.php
│ │ │ │ │ ├── CreateCommand.php
│ │ │ │ │ ├── DropCommand.php
│ │ │ │ │ └── UpdateCommand.php
│ │ │ │ └── ValidateSchemaCommand.php
│ │ │ ├── ConsoleRunner.php
│ │ │ ├── EntityManagerProvider/
│ │ │ │ ├── ConnectionFromManagerProvider.php
│ │ │ │ ├── SingleManagerProvider.php
│ │ │ │ └── UnknownManagerException.php
│ │ │ ├── EntityManagerProvider.php
│ │ │ └── MetadataFilter.php
│ │ ├── Debug.php
│ │ ├── DebugUnitOfWorkListener.php
│ │ ├── Event/
│ │ │ ├── GenerateSchemaEventArgs.php
│ │ │ └── GenerateSchemaTableEventArgs.php
│ │ ├── Exception/
│ │ │ ├── MissingColumnException.php
│ │ │ └── NotSupported.php
│ │ ├── Pagination/
│ │ │ ├── CountOutputWalker.php
│ │ │ ├── CountWalker.php
│ │ │ ├── Exception/
│ │ │ │ └── RowNumberOverFunctionNotEnabled.php
│ │ │ ├── LimitSubqueryOutputWalker.php
│ │ │ ├── LimitSubqueryWalker.php
│ │ │ ├── Paginator.php
│ │ │ ├── RootTypeWalker.php
│ │ │ ├── RowNumberOverFunction.php
│ │ │ └── WhereInWalker.php
│ │ ├── ResolveTargetEntityListener.php
│ │ ├── SchemaTool.php
│ │ ├── SchemaValidator.php
│ │ ├── ToolEvents.php
│ │ └── ToolsException.php
│ ├── TransactionRequiredException.php
│ ├── UnexpectedResultException.php
│ ├── UnitOfWork.php
│ └── Utility/
│ ├── HierarchyDiscriminatorResolver.php
│ ├── IdentifierFlattener.php
│ ├── LockSqlHelper.php
│ └── PersisterHelper.php
└── tests/
├── .gitignore
├── Doctrine/
│ └── Tests/
│ └── ORM/
│ └── Functional/
│ ├── GH8011Test.php
│ └── Ticket/
│ ├── GH12063Test.php
│ └── LazyEagerCollectionTest.php
├── Performance/
│ ├── ChangeSet/
│ │ └── UnitOfWorkComputeChangesBench.php
│ ├── EntityManagerFactory.php
│ ├── Hydration/
│ │ ├── MixedQueryFetchJoinArrayHydrationPerformanceBench.php
│ │ ├── MixedQueryFetchJoinFullObjectHydrationPerformanceBench.php
│ │ ├── MixedQueryFetchJoinPartialObjectHydrationPerformanceBench.php
│ │ ├── SimpleHydrationBench.php
│ │ ├── SimpleInsertPerformanceBench.php
│ │ ├── SimpleQueryArrayHydrationPerformanceBench.php
│ │ ├── SimpleQueryFullObjectHydrationPerformanceBench.php
│ │ ├── SimpleQueryPartialObjectHydrationPerformanceBench.php
│ │ ├── SimpleQueryScalarHydrationPerformanceBench.php
│ │ ├── SingleTableInheritanceHydrationPerformanceBench.php
│ │ └── SingleTableInheritanceInsertPerformanceBench.php
│ ├── LazyLoading/
│ │ ├── ProxyInitializationTimeBench.php
│ │ └── ProxyInstantiationTimeBench.php
│ ├── Mock/
│ │ ├── NonLoadingPersister.php
│ │ ├── NonProxyLoadingEntityManager.php
│ │ └── NonProxyLoadingUnitOfWork.php
│ └── Query/
│ └── QueryBoundParameterProcessingBench.php
├── README.markdown
├── StaticAnalysis/
│ ├── Mapping/
│ │ └── class-metadata-constructor.php
│ ├── Tools/
│ │ └── Pagination/
│ │ └── paginator-covariant.php
│ └── get-metadata.php
├── Tests/
│ ├── DbalExtensions/
│ │ ├── Connection.php
│ │ ├── QueryLog.php
│ │ └── SqlLogger.php
│ ├── DbalTypes/
│ │ ├── CustomIdObject.php
│ │ ├── CustomIdObjectType.php
│ │ ├── CustomIntType.php
│ │ ├── GH8565EmployeePayloadType.php
│ │ ├── GH8565ManagerPayloadType.php
│ │ ├── NegativeToPositiveType.php
│ │ ├── Rot13Type.php
│ │ └── UpperCaseStringType.php
│ ├── EventListener/
│ │ └── CacheMetadataListener.php
│ ├── IterableTester.php
│ ├── Mocks/
│ │ ├── ArrayResultFactory.php
│ │ ├── AttributeDriverFactory.php
│ │ ├── CacheEntryMock.php
│ │ ├── CacheKeyMock.php
│ │ ├── CacheRegionMock.php
│ │ ├── CompatibilityType.php
│ │ ├── ConcurrentRegionMock.php
│ │ ├── CustomTreeWalkerJoin.php
│ │ ├── EntityManagerMock.php
│ │ ├── EntityPersisterMock.php
│ │ ├── ExceptionConverterMock.php
│ │ ├── MetadataDriverMock.php
│ │ ├── NullSqlWalker.php
│ │ ├── SchemaManagerMock.php
│ │ ├── TimestampRegionMock.php
│ │ └── UnitOfWorkMock.php
│ ├── Models/
│ │ ├── AbstractFetchEager/
│ │ │ ├── AbstractRemoteControl.php
│ │ │ ├── MobileRemoteControl.php
│ │ │ └── User.php
│ │ ├── BigIntegers/
│ │ │ └── BigIntegers.php
│ │ ├── BinaryPrimaryKey/
│ │ │ ├── BinaryId.php
│ │ │ ├── BinaryIdType.php
│ │ │ └── Category.php
│ │ ├── CMS/
│ │ │ ├── CmsAddress.php
│ │ │ ├── CmsAddressDTO.php
│ │ │ ├── CmsAddressDTONamedArgs.php
│ │ │ ├── CmsAddressListener.php
│ │ │ ├── CmsArticle.php
│ │ │ ├── CmsComment.php
│ │ │ ├── CmsDumbDTO.php
│ │ │ ├── CmsEmail.php
│ │ │ ├── CmsEmployee.php
│ │ │ ├── CmsGroup.php
│ │ │ ├── CmsPhonenumber.php
│ │ │ ├── CmsTag.php
│ │ │ ├── CmsUser.php
│ │ │ ├── CmsUserDTO.php
│ │ │ ├── CmsUserDTONamedArgs.php
│ │ │ └── CmsUserDTOVariadicArg.php
│ │ ├── Cache/
│ │ │ ├── Action.php
│ │ │ ├── Address.php
│ │ │ ├── Attraction.php
│ │ │ ├── AttractionContactInfo.php
│ │ │ ├── AttractionInfo.php
│ │ │ ├── AttractionLocationInfo.php
│ │ │ ├── Bar.php
│ │ │ ├── Beach.php
│ │ │ ├── City.php
│ │ │ ├── Client.php
│ │ │ ├── ComplexAction.php
│ │ │ ├── Country.php
│ │ │ ├── Flight.php
│ │ │ ├── Login.php
│ │ │ ├── Person.php
│ │ │ ├── Restaurant.php
│ │ │ ├── State.php
│ │ │ ├── Token.php
│ │ │ ├── Travel.php
│ │ │ ├── Traveler.php
│ │ │ ├── TravelerProfile.php
│ │ │ └── TravelerProfileInfo.php
│ │ ├── Company/
│ │ │ ├── CompanyAuction.php
│ │ │ ├── CompanyCar.php
│ │ │ ├── CompanyContract.php
│ │ │ ├── CompanyContractListener.php
│ │ │ ├── CompanyEmployee.php
│ │ │ ├── CompanyEvent.php
│ │ │ ├── CompanyFixContract.php
│ │ │ ├── CompanyFlexContract.php
│ │ │ ├── CompanyFlexUltraContract.php
│ │ │ ├── CompanyFlexUltraContractListener.php
│ │ │ ├── CompanyManager.php
│ │ │ ├── CompanyOrganization.php
│ │ │ ├── CompanyPerson.php
│ │ │ └── CompanyRaffle.php
│ │ ├── CompositeKeyInheritance/
│ │ │ ├── JoinedChildClass.php
│ │ │ ├── JoinedDerivedChildClass.php
│ │ │ ├── JoinedDerivedIdentityClass.php
│ │ │ ├── JoinedDerivedRootClass.php
│ │ │ ├── JoinedRootClass.php
│ │ │ ├── SingleChildClass.php
│ │ │ └── SingleRootClass.php
│ │ ├── CompositeKeyRelations/
│ │ │ ├── CustomerClass.php
│ │ │ └── InvoiceClass.php
│ │ ├── CustomType/
│ │ │ ├── CustomIdObjectTypeChild.php
│ │ │ ├── CustomIdObjectTypeParent.php
│ │ │ ├── CustomTypeChild.php
│ │ │ ├── CustomTypeParent.php
│ │ │ └── CustomTypeUpperCase.php
│ │ ├── Customer/
│ │ │ ├── CustomerType.php
│ │ │ ├── ExternalCustomer.php
│ │ │ └── InternalCustomer.php
│ │ ├── DDC117/
│ │ │ ├── DDC117ApproveChanges.php
│ │ │ ├── DDC117Article.php
│ │ │ ├── DDC117ArticleDetails.php
│ │ │ ├── DDC117Editor.php
│ │ │ ├── DDC117Link.php
│ │ │ ├── DDC117Reference.php
│ │ │ └── DDC117Translation.php
│ │ ├── DDC1476/
│ │ │ └── DDC1476EntityWithDefaultFieldType.php
│ │ ├── DDC1590/
│ │ │ ├── DDC1590Entity.php
│ │ │ └── DDC1590User.php
│ │ ├── DDC1872/
│ │ │ ├── DDC1872Bar.php
│ │ │ ├── DDC1872ExampleEntityWithOverride.php
│ │ │ ├── DDC1872ExampleEntityWithoutOverride.php
│ │ │ └── DDC1872ExampleTrait.php
│ │ ├── DDC2372/
│ │ │ ├── DDC2372Address.php
│ │ │ ├── DDC2372Admin.php
│ │ │ ├── DDC2372User.php
│ │ │ └── Traits/
│ │ │ └── DDC2372AddressAndAccessors.php
│ │ ├── DDC2504/
│ │ │ ├── DDC2504ChildClass.php
│ │ │ ├── DDC2504OtherClass.php
│ │ │ └── DDC2504RootClass.php
│ │ ├── DDC2825/
│ │ │ ├── ExplicitSchemaAndTable.php
│ │ │ └── SchemaAndTableInTableName.php
│ │ ├── DDC3231/
│ │ │ ├── DDC3231EntityRepository.php
│ │ │ ├── DDC3231User1.php
│ │ │ ├── DDC3231User1NoNamespace.php
│ │ │ ├── DDC3231User2.php
│ │ │ └── DDC3231User2NoNamespace.php
│ │ ├── DDC3293/
│ │ │ ├── DDC3293Address.php
│ │ │ ├── DDC3293User.php
│ │ │ └── DDC3293UserPrefixed.php
│ │ ├── DDC3346/
│ │ │ ├── DDC3346Article.php
│ │ │ └── DDC3346Author.php
│ │ ├── DDC3579/
│ │ │ ├── DDC3579Admin.php
│ │ │ ├── DDC3579Group.php
│ │ │ └── DDC3579User.php
│ │ ├── DDC3597/
│ │ │ ├── DDC3597Image.php
│ │ │ ├── DDC3597Media.php
│ │ │ ├── DDC3597Root.php
│ │ │ └── Embeddable/
│ │ │ └── DDC3597Dimension.php
│ │ ├── DDC3699/
│ │ │ ├── DDC3699Child.php
│ │ │ ├── DDC3699Parent.php
│ │ │ ├── DDC3699RelationMany.php
│ │ │ └── DDC3699RelationOne.php
│ │ ├── DDC3711/
│ │ │ ├── DDC3711EntityA.php
│ │ │ └── DDC3711EntityB.php
│ │ ├── DDC3899/
│ │ │ ├── DDC3899Contract.php
│ │ │ ├── DDC3899FixContract.php
│ │ │ ├── DDC3899FlexContract.php
│ │ │ └── DDC3899User.php
│ │ ├── DDC4006/
│ │ │ ├── DDC4006User.php
│ │ │ └── DDC4006UserId.php
│ │ ├── DDC5934/
│ │ │ ├── DDC5934BaseContract.php
│ │ │ ├── DDC5934Contract.php
│ │ │ └── DDC5934Member.php
│ │ ├── DDC6412/
│ │ │ └── DDC6412File.php
│ │ ├── DDC6573/
│ │ │ ├── DDC6573Currency.php
│ │ │ ├── DDC6573Item.php
│ │ │ └── DDC6573Money.php
│ │ ├── DDC753/
│ │ │ ├── DDC753CustomRepository.php
│ │ │ ├── DDC753DefaultRepository.php
│ │ │ ├── DDC753EntityWithCustomRepository.php
│ │ │ ├── DDC753EntityWithDefaultCustomRepository.php
│ │ │ ├── DDC753EntityWithInvalidRepository.php
│ │ │ └── DDC753InvalidRepository.php
│ │ ├── DDC869/
│ │ │ ├── DDC869ChequePayment.php
│ │ │ ├── DDC869CreditCardPayment.php
│ │ │ ├── DDC869Payment.php
│ │ │ └── DDC869PaymentRepository.php
│ │ ├── DDC889/
│ │ │ ├── DDC889Class.php
│ │ │ ├── DDC889Entity.php
│ │ │ └── DDC889SuperClass.php
│ │ ├── DDC964/
│ │ │ ├── DDC964Address.php
│ │ │ ├── DDC964Admin.php
│ │ │ ├── DDC964Group.php
│ │ │ ├── DDC964Guest.php
│ │ │ └── DDC964User.php
│ │ ├── DataTransferObjects/
│ │ │ ├── DtoWithArrayOfEnums.php
│ │ │ └── DtoWithEnum.php
│ │ ├── DirectoryTree/
│ │ │ ├── AbstractContentItem.php
│ │ │ ├── Directory.php
│ │ │ └── File.php
│ │ ├── ECommerce/
│ │ │ ├── ECommerceCart.php
│ │ │ ├── ECommerceCategory.php
│ │ │ ├── ECommerceCustomer.php
│ │ │ ├── ECommerceFeature.php
│ │ │ ├── ECommerceProduct.php
│ │ │ ├── ECommerceProduct2.php
│ │ │ └── ECommerceShipping.php
│ │ ├── EagerFetchedCompositeOneToMany/
│ │ │ ├── RootEntity.php
│ │ │ ├── SecondLevel.php
│ │ │ └── SecondLevelWithoutCompositePrimaryKey.php
│ │ ├── Enums/
│ │ │ ├── AccessLevel.php
│ │ │ ├── BookCategory.php
│ │ │ ├── BookGenre.php
│ │ │ ├── BookWithGenre.php
│ │ │ ├── Card.php
│ │ │ ├── CardNativeEnum.php
│ │ │ ├── CardWithDefault.php
│ │ │ ├── CardWithNullable.php
│ │ │ ├── City.php
│ │ │ ├── FaultySwitch.php
│ │ │ ├── Library.php
│ │ │ ├── Product.php
│ │ │ ├── Quantity.php
│ │ │ ├── Scale.php
│ │ │ ├── Suit.php
│ │ │ ├── SwitchStatus.php
│ │ │ ├── TypedCard.php
│ │ │ ├── TypedCardEnumCompositeId.php
│ │ │ ├── TypedCardEnumId.php
│ │ │ ├── TypedCardNativeEnum.php
│ │ │ ├── Unit.php
│ │ │ └── UserStatus.php
│ │ ├── Forum/
│ │ │ ├── ForumAvatar.php
│ │ │ ├── ForumBoard.php
│ │ │ ├── ForumCategory.php
│ │ │ ├── ForumEntry.php
│ │ │ └── ForumUser.php
│ │ ├── GH10132/
│ │ │ ├── Complex.php
│ │ │ └── ComplexChild.php
│ │ ├── GH10288/
│ │ │ └── GH10288People.php
│ │ ├── GH10334/
│ │ │ ├── GH10334Foo.php
│ │ │ ├── GH10334FooCollection.php
│ │ │ ├── GH10334Product.php
│ │ │ ├── GH10334ProductType.php
│ │ │ └── GH10334ProductTypeId.php
│ │ ├── GH10336/
│ │ │ ├── GH10336Entity.php
│ │ │ └── GH10336Relation.php
│ │ ├── GH11524/
│ │ │ ├── GH11524Entity.php
│ │ │ ├── GH11524Listener.php
│ │ │ └── GH11524Relation.php
│ │ ├── GH7141/
│ │ │ └── GH7141Article.php
│ │ ├── GH7316/
│ │ │ └── GH7316Article.php
│ │ ├── GH7717/
│ │ │ ├── GH7717Child.php
│ │ │ └── GH7717Parent.php
│ │ ├── GH8565/
│ │ │ ├── GH8565Employee.php
│ │ │ ├── GH8565Manager.php
│ │ │ └── GH8565Person.php
│ │ ├── Generic/
│ │ │ ├── BooleanModel.php
│ │ │ ├── DateTimeModel.php
│ │ │ ├── DecimalModel.php
│ │ │ ├── NonAlphaColumnsEntity.php
│ │ │ └── SerializationModel.php
│ │ ├── GeoNames/
│ │ │ ├── Admin1.php
│ │ │ ├── Admin1AlternateName.php
│ │ │ ├── City.php
│ │ │ └── Country.php
│ │ ├── Global/
│ │ │ └── GlobalNamespaceModel.php
│ │ ├── Hydration/
│ │ │ ├── EntityWithArrayDefaultArrayValueM2M.php
│ │ │ └── SimpleEntity.php
│ │ ├── InvalidXml.php
│ │ ├── Issue5989/
│ │ │ ├── Issue5989Employee.php
│ │ │ ├── Issue5989Manager.php
│ │ │ └── Issue5989Person.php
│ │ ├── Issue9300/
│ │ │ ├── Issue9300Child.php
│ │ │ └── Issue9300Parent.php
│ │ ├── JoinedInheritanceType/
│ │ │ ├── AnotherChildClass.php
│ │ │ ├── ChildClass.php
│ │ │ └── RootClass.php
│ │ ├── Legacy/
│ │ │ ├── LegacyArticle.php
│ │ │ ├── LegacyCar.php
│ │ │ ├── LegacyUser.php
│ │ │ └── LegacyUserReference.php
│ │ ├── ManyToManyPersister/
│ │ │ ├── ChildClass.php
│ │ │ ├── OtherParentClass.php
│ │ │ └── ParentClass.php
│ │ ├── MixedToOneIdentity/
│ │ │ ├── CompositeToOneKeyState.php
│ │ │ └── Country.php
│ │ ├── Navigation/
│ │ │ ├── NavCountry.php
│ │ │ ├── NavPhotos.php
│ │ │ ├── NavPointOfInterest.php
│ │ │ ├── NavTour.php
│ │ │ └── NavUser.php
│ │ ├── NonPublicSchemaJoins/
│ │ │ └── User.php
│ │ ├── NullDefault/
│ │ │ └── NullDefaultColumn.php
│ │ ├── OneToOneInverseSideLoad/
│ │ │ ├── InverseSide.php
│ │ │ └── OwningSide.php
│ │ ├── OneToOneInverseSideWithAssociativeIdLoad/
│ │ │ ├── InverseSide.php
│ │ │ ├── InverseSideIdTarget.php
│ │ │ └── OwningSide.php
│ │ ├── OneToOneSingleTableInheritance/
│ │ │ ├── Cat.php
│ │ │ ├── LitterBox.php
│ │ │ └── Pet.php
│ │ ├── Pagination/
│ │ │ ├── Company.php
│ │ │ ├── Department.php
│ │ │ ├── Logo.php
│ │ │ ├── User.php
│ │ │ └── User1.php
│ │ ├── PersistentObject/
│ │ │ ├── PersistentCollectionContent.php
│ │ │ ├── PersistentCollectionHolder.php
│ │ │ └── PersistentEntity.php
│ │ ├── Project/
│ │ │ ├── Project.php
│ │ │ ├── ProjectId.php
│ │ │ ├── ProjectInvalidMapping.php
│ │ │ └── ProjectName.php
│ │ ├── PropertyHooks/
│ │ │ ├── MappingVirtualProperty.php
│ │ │ └── User.php
│ │ ├── Quote/
│ │ │ ├── Address.php
│ │ │ ├── City.php
│ │ │ ├── FullAddress.php
│ │ │ ├── Group.php
│ │ │ ├── NumericEntity.php
│ │ │ ├── Phone.php
│ │ │ └── User.php
│ │ ├── ReadonlyProperties/
│ │ │ ├── Author.php
│ │ │ ├── Book.php
│ │ │ └── SimpleBook.php
│ │ ├── Reflection/
│ │ │ ├── AbstractEmbeddable.php
│ │ │ ├── ArrayObjectExtendingClass.php
│ │ │ ├── ClassWithMixedProperties.php
│ │ │ ├── ConcreteEmbeddable.php
│ │ │ └── ParentClass.php
│ │ ├── Routing/
│ │ │ ├── RoutingLeg.php
│ │ │ ├── RoutingLocation.php
│ │ │ ├── RoutingRoute.php
│ │ │ └── RoutingRouteBooking.php
│ │ ├── StockExchange/
│ │ │ ├── Bond.php
│ │ │ ├── Market.php
│ │ │ └── Stock.php
│ │ ├── Taxi/
│ │ │ ├── Car.php
│ │ │ ├── Driver.php
│ │ │ ├── PaidRide.php
│ │ │ └── Ride.php
│ │ ├── Tweet/
│ │ │ ├── Tweet.php
│ │ │ ├── User.php
│ │ │ └── UserList.php
│ │ ├── TypedProperties/
│ │ │ ├── Contact.php
│ │ │ ├── UserTyped.php
│ │ │ └── UserTypedWithCustomTypedField.php
│ │ ├── Upsertable/
│ │ │ ├── Insertable.php
│ │ │ └── Updatable.php
│ │ ├── ValueConversionType/
│ │ │ ├── AuxiliaryEntity.php
│ │ │ ├── InversedManyToManyCompositeIdEntity.php
│ │ │ ├── InversedManyToManyCompositeIdForeignKeyEntity.php
│ │ │ ├── InversedManyToManyEntity.php
│ │ │ ├── InversedManyToManyExtraLazyEntity.php
│ │ │ ├── InversedOneToManyCompositeIdEntity.php
│ │ │ ├── InversedOneToManyCompositeIdForeignKeyEntity.php
│ │ │ ├── InversedOneToManyEntity.php
│ │ │ ├── InversedOneToManyExtraLazyEntity.php
│ │ │ ├── InversedOneToOneCompositeIdEntity.php
│ │ │ ├── InversedOneToOneCompositeIdForeignKeyEntity.php
│ │ │ ├── InversedOneToOneEntity.php
│ │ │ ├── OwningManyToManyCompositeIdEntity.php
│ │ │ ├── OwningManyToManyCompositeIdForeignKeyEntity.php
│ │ │ ├── OwningManyToManyEntity.php
│ │ │ ├── OwningManyToManyExtraLazyEntity.php
│ │ │ ├── OwningManyToOneCompositeIdEntity.php
│ │ │ ├── OwningManyToOneCompositeIdForeignKeyEntity.php
│ │ │ ├── OwningManyToOneEntity.php
│ │ │ ├── OwningManyToOneExtraLazyEntity.php
│ │ │ ├── OwningManyToOneIdForeignKeyEntity.php
│ │ │ ├── OwningOneToOneCompositeIdEntity.php
│ │ │ ├── OwningOneToOneCompositeIdForeignKeyEntity.php
│ │ │ └── OwningOneToOneEntity.php
│ │ ├── ValueObjects/
│ │ │ ├── Name.php
│ │ │ └── Person.php
│ │ ├── VersionedManyToOne/
│ │ │ ├── Article.php
│ │ │ └── Category.php
│ │ └── VersionedOneToOne/
│ │ ├── FirstRelatedEntity.php
│ │ └── SecondRelatedEntity.php
│ ├── ORM/
│ │ ├── AbstractQueryTest.php
│ │ ├── Cache/
│ │ │ ├── CacheConfigTest.php
│ │ │ ├── CacheKeyTest.php
│ │ │ ├── CacheLoggerChainTest.php
│ │ │ ├── DefaultCacheFactoryTest.php
│ │ │ ├── DefaultCacheTest.php
│ │ │ ├── DefaultCollectionHydratorTest.php
│ │ │ ├── DefaultEntityHydratorTest.php
│ │ │ ├── DefaultQueryCacheTest.php
│ │ │ ├── DefaultRegionTest.php
│ │ │ ├── FileLockRegionTest.php
│ │ │ ├── Persister/
│ │ │ │ ├── Collection/
│ │ │ │ │ ├── CollectionPersisterTestCase.php
│ │ │ │ │ ├── NonStrictReadWriteCachedCollectionPersisterTest.php
│ │ │ │ │ ├── ReadOnlyCachedCollectionPersisterTest.php
│ │ │ │ │ └── ReadWriteCachedCollectionPersisterTest.php
│ │ │ │ └── Entity/
│ │ │ │ ├── EntityPersisterTestCase.php
│ │ │ │ ├── NonStrictReadWriteCachedEntityPersisterTest.php
│ │ │ │ ├── ReadOnlyCachedEntityPersisterTest.php
│ │ │ │ └── ReadWriteCachedEntityPersisterTest.php
│ │ │ ├── RegionTestCase.php
│ │ │ └── StatisticsCacheLoggerTest.php
│ │ ├── ConfigurationTest.php
│ │ ├── Entity/
│ │ │ └── ConstructorTest.php
│ │ ├── EntityManagerTest.php
│ │ ├── EntityNotFoundExceptionTest.php
│ │ ├── Event/
│ │ │ └── OnClassMetadataNotFoundEventArgsTest.php
│ │ ├── Functional/
│ │ │ ├── AbstractFetchEagerTest.php
│ │ │ ├── AbstractManyToManyAssociationTestCase.php
│ │ │ ├── AdvancedAssociationTest.php
│ │ │ ├── AdvancedDqlQueryTest.php
│ │ │ ├── BasicFunctionalTest.php
│ │ │ ├── CascadeRemoveOrderTest.php
│ │ │ ├── ClassTableInheritanceSecondTest.php
│ │ │ ├── ClassTableInheritanceTest.php
│ │ │ ├── ClearEventTest.php
│ │ │ ├── CompositeKeyRelationsTest.php
│ │ │ ├── CompositePrimaryKeyTest.php
│ │ │ ├── CompositePrimaryKeyWithAssociationsTest.php
│ │ │ ├── CustomFunctionsTest.php
│ │ │ ├── CustomIdObjectTypeTest.php
│ │ │ ├── DatabaseDriverTest.php
│ │ │ ├── DatabaseDriverTestCase.php
│ │ │ ├── DefaultTimeExpressionTest.php
│ │ │ ├── DefaultTimeExpressionXmlTest.php
│ │ │ ├── DefaultValuesTest.php
│ │ │ ├── DetachedEntityTest.php
│ │ │ ├── EagerFetchCollectionTest.php
│ │ │ ├── EagerFetchOneToManyWithCompositeKeyTest.php
│ │ │ ├── EntityListenersTest.php
│ │ │ ├── EntityRepositoryCriteriaTest.php
│ │ │ ├── EntityRepositoryTest.php
│ │ │ ├── EnumTest.php
│ │ │ ├── ExtraLazyCollectionTest.php
│ │ │ ├── FlushEventTest.php
│ │ │ ├── GH7877Test.php
│ │ │ ├── HydrationCacheTest.php
│ │ │ ├── IdentityMapTest.php
│ │ │ ├── IndexByAssociationTest.php
│ │ │ ├── InsertableUpdatableTest.php
│ │ │ ├── InvalidMappingDefinitionTest.php
│ │ │ ├── JoinedTableCompositeKeyTest.php
│ │ │ ├── LifecycleCallbackTest.php
│ │ │ ├── Locking/
│ │ │ │ ├── GearmanLockTest.php
│ │ │ │ ├── LockAgentWorker.php
│ │ │ │ ├── LockTest.php
│ │ │ │ └── OptimisticTest.php
│ │ │ ├── ManyToManyBasicAssociationTest.php
│ │ │ ├── ManyToManyBidirectionalAssociationTest.php
│ │ │ ├── ManyToManyEventTest.php
│ │ │ ├── ManyToManySelfReferentialAssociationTest.php
│ │ │ ├── ManyToManyUnidirectionalAssociationTest.php
│ │ │ ├── MappedSuperclassTest.php
│ │ │ ├── NativeQueryTest.php
│ │ │ ├── NewOperatorTest.php
│ │ │ ├── OneToManyBidirectionalAssociationTest.php
│ │ │ ├── OneToManyOrphanRemovalTest.php
│ │ │ ├── OneToManySelfReferentialAssociationTest.php
│ │ │ ├── OneToManyUnidirectionalAssociationTest.php
│ │ │ ├── OneToOneBidirectionalAssociationTest.php
│ │ │ ├── OneToOneEagerLoadingTest.php
│ │ │ ├── OneToOneInverseSideLoadAfterDqlQueryTest.php
│ │ │ ├── OneToOneInverseSideWithAssociativeIdLoadAfterDqlQueryTest.php
│ │ │ ├── OneToOneOrphanRemovalTest.php
│ │ │ ├── OneToOneSelfReferentialAssociationTest.php
│ │ │ ├── OneToOneSingleTableInheritanceTest.php
│ │ │ ├── OneToOneUnidirectionalAssociationTest.php
│ │ │ ├── OrderedCollectionTest.php
│ │ │ ├── OrderedJoinedTableInheritanceCollectionTest.php
│ │ │ ├── PaginationTest.php
│ │ │ ├── ParserResultSerializationTest.php
│ │ │ ├── ParserResults/
│ │ │ │ └── single_select_2_17_0.txt
│ │ │ ├── PersistentCollectionCriteriaTest.php
│ │ │ ├── PersistentCollectionTest.php
│ │ │ ├── PostFlushEventTest.php
│ │ │ ├── PostLoadEventTest.php
│ │ │ ├── PrePersistEventTest.php
│ │ │ ├── PropertyHooksTest.php
│ │ │ ├── ProxiesLikeEntitiesTest.php
│ │ │ ├── QueryBuilderParenthesisTest.php
│ │ │ ├── QueryCacheTest.php
│ │ │ ├── QueryDqlFunctionTest.php
│ │ │ ├── QueryIterableTest.php
│ │ │ ├── QueryParameterTest.php
│ │ │ ├── QueryTest.php
│ │ │ ├── ReadOnlyTest.php
│ │ │ ├── ReadonlyPropertiesTest.php
│ │ │ ├── ReferenceProxyTest.php
│ │ │ ├── ResultCacheTest.php
│ │ │ ├── SQLFilterTest.php
│ │ │ ├── SchemaTool/
│ │ │ │ ├── CompanySchemaTest.php
│ │ │ │ ├── DBAL483Test.php
│ │ │ │ ├── DDC214Test.php
│ │ │ │ ├── MySqlSchemaToolTest.php
│ │ │ │ └── PostgreSqlSchemaToolTest.php
│ │ │ ├── SchemaValidatorTest.php
│ │ │ ├── SecondLevelCacheCompositePrimaryKeyTest.php
│ │ │ ├── SecondLevelCacheCompositePrimaryKeyWithAssociationsTest.php
│ │ │ ├── SecondLevelCacheConcurrentTest.php
│ │ │ ├── SecondLevelCacheCountQueriesTest.php
│ │ │ ├── SecondLevelCacheCriteriaTest.php
│ │ │ ├── SecondLevelCacheExtraLazyCollectionTest.php
│ │ │ ├── SecondLevelCacheFunctionalTestCase.php
│ │ │ ├── SecondLevelCacheJoinTableInheritanceTest.php
│ │ │ ├── SecondLevelCacheManyToManyTest.php
│ │ │ ├── SecondLevelCacheManyToOneTest.php
│ │ │ ├── SecondLevelCacheOneToManyTest.php
│ │ │ ├── SecondLevelCacheOneToOneTest.php
│ │ │ ├── SecondLevelCacheQueryCacheTest.php
│ │ │ ├── SecondLevelCacheRepositoryTest.php
│ │ │ ├── SecondLevelCacheSingleTableInheritanceTest.php
│ │ │ ├── SecondLevelCacheTest.php
│ │ │ ├── SequenceGeneratorTest.php
│ │ │ ├── SingleTableCompositeKeyTest.php
│ │ │ ├── SingleTableInheritanceTest.php
│ │ │ ├── StandardEntityPersisterTest.php
│ │ │ ├── Ticket/
│ │ │ │ ├── DDC1040Test.php
│ │ │ │ ├── DDC1041Test.php
│ │ │ │ ├── DDC1043Test.php
│ │ │ │ ├── DDC1080Test.php
│ │ │ │ ├── DDC1113Test.php
│ │ │ │ ├── DDC1129Test.php
│ │ │ │ ├── DDC1163Test.php
│ │ │ │ ├── DDC117Test.php
│ │ │ │ ├── DDC1181Test.php
│ │ │ │ ├── DDC1193Test.php
│ │ │ │ ├── DDC1209Test.php
│ │ │ │ ├── DDC1225Test.php
│ │ │ │ ├── DDC1228Test.php
│ │ │ │ ├── DDC1238Test.php
│ │ │ │ ├── DDC1250Test.php
│ │ │ │ ├── DDC1300Test.php
│ │ │ │ ├── DDC1301Test.php
│ │ │ │ ├── DDC1306Test.php
│ │ │ │ ├── DDC1335Test.php
│ │ │ │ ├── DDC1400Test.php
│ │ │ │ ├── DDC142Test.php
│ │ │ │ ├── DDC1430Test.php
│ │ │ │ ├── DDC1436Test.php
│ │ │ │ ├── DDC144Test.php
│ │ │ │ ├── DDC1452Test.php
│ │ │ │ ├── DDC1454Test.php
│ │ │ │ ├── DDC1458Test.php
│ │ │ │ ├── DDC1461Test.php
│ │ │ │ ├── DDC1514Test.php
│ │ │ │ ├── DDC1515Test.php
│ │ │ │ ├── DDC1526Test.php
│ │ │ │ ├── DDC1545Test.php
│ │ │ │ ├── DDC1548Test.php
│ │ │ │ ├── DDC1595Test.php
│ │ │ │ ├── DDC163Test.php
│ │ │ │ ├── DDC1643Test.php
│ │ │ │ ├── DDC1654Test.php
│ │ │ │ ├── DDC1655Test.php
│ │ │ │ ├── DDC1666Test.php
│ │ │ │ ├── DDC1685Test.php
│ │ │ │ ├── DDC168Test.php
│ │ │ │ ├── DDC1695Test.php
│ │ │ │ ├── DDC1707Test.php
│ │ │ │ ├── DDC1719Test.php
│ │ │ │ ├── DDC1757Test.php
│ │ │ │ ├── DDC1778Test.php
│ │ │ │ ├── DDC1787Test.php
│ │ │ │ ├── DDC1843Test.php
│ │ │ │ ├── DDC1884Test.php
│ │ │ │ ├── DDC1885Test.php
│ │ │ │ ├── DDC1918Test.php
│ │ │ │ ├── DDC1925Test.php
│ │ │ │ ├── DDC192Test.php
│ │ │ │ ├── DDC1995Test.php
│ │ │ │ ├── DDC1998Test.php
│ │ │ │ ├── DDC199Test.php
│ │ │ │ ├── DDC2012Test.php
│ │ │ │ ├── DDC2074Test.php
│ │ │ │ ├── DDC2084Test.php
│ │ │ │ ├── DDC2090Test.php
│ │ │ │ ├── DDC2106Test.php
│ │ │ │ ├── DDC211Test.php
│ │ │ │ ├── DDC2138Test.php
│ │ │ │ ├── DDC2175Test.php
│ │ │ │ ├── DDC2182Test.php
│ │ │ │ ├── DDC2214Test.php
│ │ │ │ ├── DDC2224Test.php
│ │ │ │ ├── DDC2252Test.php
│ │ │ │ ├── DDC2306Test.php
│ │ │ │ ├── DDC2346Test.php
│ │ │ │ ├── DDC2350Test.php
│ │ │ │ ├── DDC2359Test.php
│ │ │ │ ├── DDC237Test.php
│ │ │ │ ├── DDC2387Test.php
│ │ │ │ ├── DDC2415Test.php
│ │ │ │ ├── DDC2494Test.php
│ │ │ │ ├── DDC2519Test.php
│ │ │ │ ├── DDC2575Test.php
│ │ │ │ ├── DDC2579Test.php
│ │ │ │ ├── DDC258Test.php
│ │ │ │ ├── DDC2602Test.php
│ │ │ │ ├── DDC2655Test.php
│ │ │ │ ├── DDC2660Test.php
│ │ │ │ ├── DDC2692Test.php
│ │ │ │ ├── DDC2759Test.php
│ │ │ │ ├── DDC2775Test.php
│ │ │ │ ├── DDC2780Test.php
│ │ │ │ ├── DDC2790Test.php
│ │ │ │ ├── DDC279Test.php
│ │ │ │ ├── DDC2825Test.php
│ │ │ │ ├── DDC2862Test.php
│ │ │ │ ├── DDC2895Test.php
│ │ │ │ ├── DDC2931Test.php
│ │ │ │ ├── DDC2943Test.php
│ │ │ │ ├── DDC2984Test.php
│ │ │ │ ├── DDC2996Test.php
│ │ │ │ ├── DDC3033Test.php
│ │ │ │ ├── DDC3042Test.php
│ │ │ │ ├── DDC3068Test.php
│ │ │ │ ├── DDC309Test.php
│ │ │ │ ├── DDC3103Test.php
│ │ │ │ ├── DDC3123Test.php
│ │ │ │ ├── DDC3160Test.php
│ │ │ │ ├── DDC3170Test.php
│ │ │ │ ├── DDC3192Test.php
│ │ │ │ ├── DDC3223Test.php
│ │ │ │ ├── DDC3300Test.php
│ │ │ │ ├── DDC3303Test.php
│ │ │ │ ├── DDC331Test.php
│ │ │ │ ├── DDC3330Test.php
│ │ │ │ ├── DDC3346Test.php
│ │ │ │ ├── DDC345Test.php
│ │ │ │ ├── DDC353Test.php
│ │ │ │ ├── DDC3582Test.php
│ │ │ │ ├── DDC3597Test.php
│ │ │ │ ├── DDC3634Test.php
│ │ │ │ ├── DDC3644Test.php
│ │ │ │ ├── DDC3719Test.php
│ │ │ │ ├── DDC371Test.php
│ │ │ │ ├── DDC3785Test.php
│ │ │ │ ├── DDC381Test.php
│ │ │ │ ├── DDC3967Test.php
│ │ │ │ ├── DDC4003Test.php
│ │ │ │ ├── DDC4024Test.php
│ │ │ │ ├── DDC422Test.php
│ │ │ │ ├── DDC425Test.php
│ │ │ │ ├── DDC440Test.php
│ │ │ │ ├── DDC444Test.php
│ │ │ │ ├── DDC448Test.php
│ │ │ │ ├── DDC493Test.php
│ │ │ │ ├── DDC512Test.php
│ │ │ │ ├── DDC513Test.php
│ │ │ │ ├── DDC522Test.php
│ │ │ │ ├── DDC531Test.php
│ │ │ │ ├── DDC5684Test.php
│ │ │ │ ├── DDC588Test.php
│ │ │ │ ├── DDC599Test.php
│ │ │ │ ├── DDC618Test.php
│ │ │ │ ├── DDC6303Test.php
│ │ │ │ ├── DDC633Test.php
│ │ │ │ ├── DDC6460Test.php
│ │ │ │ ├── DDC6558Test.php
│ │ │ │ ├── DDC656Test.php
│ │ │ │ ├── DDC6573Test.php
│ │ │ │ ├── DDC657Test.php
│ │ │ │ ├── DDC698Test.php
│ │ │ │ ├── DDC69Test.php
│ │ │ │ ├── DDC719Test.php
│ │ │ │ ├── DDC735Test.php
│ │ │ │ ├── DDC736Test.php
│ │ │ │ ├── DDC748Test.php
│ │ │ │ ├── DDC767Test.php
│ │ │ │ ├── DDC7969Test.php
│ │ │ │ ├── DDC809Test.php
│ │ │ │ ├── DDC812Test.php
│ │ │ │ ├── DDC832Test.php
│ │ │ │ ├── DDC837Test.php
│ │ │ │ ├── DDC849Test.php
│ │ │ │ ├── DDC881Test.php
│ │ │ │ ├── DDC933Test.php
│ │ │ │ ├── DDC949Test.php
│ │ │ │ ├── DDC960Test.php
│ │ │ │ ├── DDC992Test.php
│ │ │ │ ├── GH10049/
│ │ │ │ │ ├── GH10049Test.php
│ │ │ │ │ ├── ReadOnlyPropertyInheritor.php
│ │ │ │ │ └── ReadOnlyPropertyOwner.php
│ │ │ │ ├── GH10132Test.php
│ │ │ │ ├── GH10288Test.php
│ │ │ │ ├── GH10334Test.php
│ │ │ │ ├── GH10336Test.php
│ │ │ │ ├── GH10348Test.php
│ │ │ │ ├── GH10387Test.php
│ │ │ │ ├── GH10450Test.php
│ │ │ │ ├── GH10454Test.php
│ │ │ │ ├── GH10462Test.php
│ │ │ │ ├── GH10473Test.php
│ │ │ │ ├── GH10531Test.php
│ │ │ │ ├── GH10532Test.php
│ │ │ │ ├── GH10566Test.php
│ │ │ │ ├── GH10625Test.php
│ │ │ │ ├── GH10661/
│ │ │ │ │ ├── GH10661Test.php
│ │ │ │ │ ├── InvalidChildEntity.php
│ │ │ │ │ └── InvalidEntity.php
│ │ │ │ ├── GH10747Test.php
│ │ │ │ ├── GH10752Test.php
│ │ │ │ ├── GH10808Test.php
│ │ │ │ ├── GH10869Test.php
│ │ │ │ ├── GH10880Test.php
│ │ │ │ ├── GH10889Test.php
│ │ │ │ ├── GH10912Test.php
│ │ │ │ ├── GH10913Test.php
│ │ │ │ ├── GH10927Test.php
│ │ │ │ ├── GH11017/
│ │ │ │ │ ├── GH11017Entity.php
│ │ │ │ │ ├── GH11017Enum.php
│ │ │ │ │ └── GH11017Test.php
│ │ │ │ ├── GH11037/
│ │ │ │ │ ├── EntityStatus.php
│ │ │ │ │ ├── GH11037Test.php
│ │ │ │ │ ├── IntEntityStatus.php
│ │ │ │ │ ├── InvalidEntityWithTypedEnum.php
│ │ │ │ │ ├── StringEntityStatus.php
│ │ │ │ │ └── ValidEntityWithTypedEnum.php
│ │ │ │ ├── GH11058Test.php
│ │ │ │ ├── GH11072/
│ │ │ │ │ ├── GH11072EntityAdvanced.php
│ │ │ │ │ ├── GH11072EntityBasic.php
│ │ │ │ │ └── GH11072Test.php
│ │ │ │ ├── GH11112Test.php
│ │ │ │ ├── GH11135Test.php
│ │ │ │ ├── GH11149/
│ │ │ │ │ ├── EagerProduct.php
│ │ │ │ │ ├── EagerProductTranslation.php
│ │ │ │ │ ├── GH11149Test.php
│ │ │ │ │ └── Locale.php
│ │ │ │ ├── GH11163Test.php
│ │ │ │ ├── GH11199Test.php
│ │ │ │ ├── GH11341Test.php
│ │ │ │ ├── GH11386/
│ │ │ │ │ ├── GH11386EntityCart.php
│ │ │ │ │ ├── GH11386EntityCustomer.php
│ │ │ │ │ ├── GH11386EnumType.php
│ │ │ │ │ └── GH11386Test.php
│ │ │ │ ├── GH11487Test.php
│ │ │ │ ├── GH11500Test.php
│ │ │ │ ├── GH11501Test.php
│ │ │ │ ├── GH11524Test.php
│ │ │ │ ├── GH11982Test.php
│ │ │ │ ├── GH12166/
│ │ │ │ │ ├── GH12166Test.php
│ │ │ │ │ └── LazyEntityWithReadonlyId.php
│ │ │ │ ├── GH12174Test.php
│ │ │ │ ├── GH12183Test.php
│ │ │ │ ├── GH12254Test.php
│ │ │ │ ├── GH2947Test.php
│ │ │ │ ├── GH5562Test.php
│ │ │ │ ├── GH5742Test.php
│ │ │ │ ├── GH5762Test.php
│ │ │ │ ├── GH5804Test.php
│ │ │ │ ├── GH5887Test.php
│ │ │ │ ├── GH5988Test.php
│ │ │ │ ├── GH5998Test.php
│ │ │ │ ├── GH6029Test.php
│ │ │ │ ├── GH6123Test.php
│ │ │ │ ├── GH6141Test.php
│ │ │ │ ├── GH6217Test.php
│ │ │ │ ├── GH6362Test.php
│ │ │ │ ├── GH6394Test.php
│ │ │ │ ├── GH6402Test.php
│ │ │ │ ├── GH6464Test.php
│ │ │ │ ├── GH6499OneToManyRelationshipTest.php
│ │ │ │ ├── GH6499OneToOneRelationshipTest.php
│ │ │ │ ├── GH6499Test.php
│ │ │ │ ├── GH6531Test.php
│ │ │ │ ├── GH6682Test.php
│ │ │ │ ├── GH6699Test.php
│ │ │ │ ├── GH6740Test.php
│ │ │ │ ├── GH6823Test.php
│ │ │ │ ├── GH6937Test.php
│ │ │ │ ├── GH7006Test.php
│ │ │ │ ├── GH7012Test.php
│ │ │ │ ├── GH7062Test.php
│ │ │ │ ├── GH7067Test.php
│ │ │ │ ├── GH7068Test.php
│ │ │ │ ├── GH7079Test.php
│ │ │ │ ├── GH7180Test.php
│ │ │ │ ├── GH7259Test.php
│ │ │ │ ├── GH7286Test.php
│ │ │ │ ├── GH7366Test.php
│ │ │ │ ├── GH7496WithToIterableTest.php
│ │ │ │ ├── GH7505Test.php
│ │ │ │ ├── GH7512Test.php
│ │ │ │ ├── GH7629Test.php
│ │ │ │ ├── GH7661Test.php
│ │ │ │ ├── GH7684Test.php
│ │ │ │ ├── GH7717Test.php
│ │ │ │ ├── GH7735Test.php
│ │ │ │ ├── GH7737Test.php
│ │ │ │ ├── GH7761Test.php
│ │ │ │ ├── GH7767Test.php
│ │ │ │ ├── GH7820Test.php
│ │ │ │ ├── GH7829Test.php
│ │ │ │ ├── GH7836Test.php
│ │ │ │ ├── GH7864Test.php
│ │ │ │ ├── GH7869Test.php
│ │ │ │ ├── GH7875Test.php
│ │ │ │ ├── GH7941Test.php
│ │ │ │ ├── GH8055Test.php
│ │ │ │ ├── GH8061Test.php
│ │ │ │ ├── GH8127Test.php
│ │ │ │ ├── GH8217Test.php
│ │ │ │ ├── GH8415Test.php
│ │ │ │ ├── GH8415ToManyAssociationTest.php
│ │ │ │ ├── GH8443Test.php
│ │ │ │ ├── GH8499Test.php
│ │ │ │ ├── GH8663Test.php
│ │ │ │ ├── GH8914Test.php
│ │ │ │ ├── GH9027Test.php
│ │ │ │ ├── GH9109Test.php
│ │ │ │ ├── GH9192Test.php
│ │ │ │ ├── GH9230Test.php
│ │ │ │ ├── GH9335Test.php
│ │ │ │ ├── GH9467/
│ │ │ │ │ ├── GH9467Test.php
│ │ │ │ │ ├── JoinedInheritanceChild.php
│ │ │ │ │ ├── JoinedInheritanceNonInsertableColumn.php
│ │ │ │ │ ├── JoinedInheritanceNonUpdatableColumn.php
│ │ │ │ │ ├── JoinedInheritanceNonWritableColumn.php
│ │ │ │ │ ├── JoinedInheritanceRoot.php
│ │ │ │ │ └── JoinedInheritanceWritableColumn.php
│ │ │ │ ├── GH9516Test.php
│ │ │ │ ├── GH9579Test.php
│ │ │ │ ├── GH9807Test.php
│ │ │ │ ├── Issue5989Test.php
│ │ │ │ ├── Issue9300Test.php
│ │ │ │ ├── SwitchContextWithFilter/
│ │ │ │ │ ├── AbstractTestCase.php
│ │ │ │ │ ├── ChangeFiltersTest.php
│ │ │ │ │ ├── Entity/
│ │ │ │ │ │ ├── Insurance.php
│ │ │ │ │ │ ├── Order.php
│ │ │ │ │ │ ├── Patient.php
│ │ │ │ │ │ ├── PatientInsurance.php
│ │ │ │ │ │ ├── Practice.php
│ │ │ │ │ │ ├── PrimaryPatInsurance.php
│ │ │ │ │ │ ├── SecondaryPatInsurance.php
│ │ │ │ │ │ └── User.php
│ │ │ │ │ ├── SQLFilter/
│ │ │ │ │ │ ├── CompanySQLFilter.php
│ │ │ │ │ │ └── PracticeContextSQLFilter.php
│ │ │ │ │ └── SwitchContextTest.php
│ │ │ │ ├── SwitchContextWithFilterAndIndexedRelation/
│ │ │ │ │ ├── Category.php
│ │ │ │ │ ├── CategoryTypeSQLFilter.php
│ │ │ │ │ ├── ChangeFiltersTest.php
│ │ │ │ │ └── Company.php
│ │ │ │ ├── Ticket2481Test.php
│ │ │ │ ├── Ticket4646InstanceOfAbstractTest.php
│ │ │ │ ├── Ticket4646InstanceOfMultiLevelTest.php
│ │ │ │ ├── Ticket4646InstanceOfParametricTest.php
│ │ │ │ ├── Ticket4646InstanceOfTest.php
│ │ │ │ └── Ticket4646InstanceOfWithMultipleParametersTest.php
│ │ │ ├── TypeTest.php
│ │ │ ├── TypeValueSqlTest.php
│ │ │ ├── UnitOfWorkLifecycleTest.php
│ │ │ ├── ValueConversionType/
│ │ │ │ ├── ManyToManyCompositeIdForeignKeyTest.php
│ │ │ │ ├── ManyToManyCompositeIdTest.php
│ │ │ │ ├── ManyToManyCriteriaMatchingTest.php
│ │ │ │ ├── ManyToManyExtraLazyTest.php
│ │ │ │ ├── ManyToManyTest.php
│ │ │ │ ├── OneToManyCompositeIdForeignKeyTest.php
│ │ │ │ ├── OneToManyCompositeIdTest.php
│ │ │ │ ├── OneToManyCriteriaMatchingTest.php
│ │ │ │ ├── OneToManyExtraLazyTest.php
│ │ │ │ ├── OneToManyTest.php
│ │ │ │ ├── OneToOneCompositeIdForeignKeyTest.php
│ │ │ │ ├── OneToOneCompositeIdTest.php
│ │ │ │ └── OneToOneTest.php
│ │ │ ├── ValueObjectsTest.php
│ │ │ └── VersionedOneToOneTest.php
│ │ ├── Hydration/
│ │ │ ├── AbstractHydratorTest.php
│ │ │ ├── ArrayHydratorTest.php
│ │ │ ├── CustomHydratorTest.php
│ │ │ ├── HydrationTestCase.php
│ │ │ ├── ObjectHydratorTest.php
│ │ │ ├── ResultSetMappingTest.php
│ │ │ ├── ScalarColumnHydratorTest.php
│ │ │ ├── ScalarHydratorTest.php
│ │ │ ├── SimpleObjectHydratorTest.php
│ │ │ └── SingleScalarHydratorTest.php
│ │ ├── Id/
│ │ │ ├── AssignedGeneratorTest.php
│ │ │ └── SequenceGeneratorTest.php
│ │ ├── Internal/
│ │ │ ├── HydrationCompleteHandlerTest.php
│ │ │ ├── Node.php
│ │ │ ├── StronglyConnectedComponentsTest.php
│ │ │ ├── TopologicalSortTest.php
│ │ │ └── UnitOfWork/
│ │ │ └── InsertBatchTest.php
│ │ ├── LazyCriteriaCollectionTest.php
│ │ ├── Mapping/
│ │ │ ├── AnsiQuoteStrategyTest.php
│ │ │ ├── AssociationMappingTest.php
│ │ │ ├── AttributeDriverTest.php
│ │ │ ├── AttributeReaderTest.php
│ │ │ ├── BasicInheritanceMappingTest.php
│ │ │ ├── ClassMetadataBuilderTest.php
│ │ │ ├── ClassMetadataFactoryTest.php
│ │ │ ├── ClassMetadataLoadEventTest.php
│ │ │ ├── ClassMetadataTest.php
│ │ │ ├── DefaultQuoteStrategyTest.php
│ │ │ ├── DiscriminatorColumnMappingTest.php
│ │ │ ├── EmbeddedClassMappingTest.php
│ │ │ ├── EntityListenerResolverTest.php
│ │ │ ├── FieldBuilderTest.php
│ │ │ ├── FieldMappingTest.php
│ │ │ ├── Fixtures/
│ │ │ │ └── AttributeEntityWithNestedJoinColumns.php
│ │ │ ├── InverseSideMappingTest.php
│ │ │ ├── JoinColumnMappingTest.php
│ │ │ ├── JoinTableMappingTest.php
│ │ │ ├── ManyToManyOwningSideMappingTest.php
│ │ │ ├── ManyToOneAssociationMappingTest.php
│ │ │ ├── MappingDriverTestCase.php
│ │ │ ├── NamingStrategy/
│ │ │ │ ├── CustomPascalNamingStrategy.php
│ │ │ │ └── JoinColumnClassNamingStrategy.php
│ │ │ ├── NamingStrategyTest.php
│ │ │ ├── OneToOneOwningSideMappingTest.php
│ │ │ ├── OwningSideMappingTest.php
│ │ │ ├── PropertyAccessors/
│ │ │ │ ├── EnumPropertyAccessorTest.php
│ │ │ │ ├── ObjectCastPropertyAccessorTest.php
│ │ │ │ ├── RawValuePropertyAccessorTest.php
│ │ │ │ ├── ReadOnlyAccessorTest.php
│ │ │ │ └── TypedNoDefaultPropertyAccessorTest.php
│ │ │ ├── QuoteStrategyTest.php
│ │ │ ├── ReflectionEmbeddedPropertyTest.php
│ │ │ ├── ReflectionReadonlyPropertyTest.php
│ │ │ ├── StaticPHPMappingDriverTest.php
│ │ │ ├── Symfony/
│ │ │ │ ├── DriverTestCase.php
│ │ │ │ └── XmlDriverTest.php
│ │ │ ├── TableMappingTest.php
│ │ │ ├── ToManyAssociationMappingTest.php
│ │ │ ├── TypedEnumFieldMapperTest.php
│ │ │ ├── TypedFieldMapper/
│ │ │ │ └── CustomIntAsStringTypedFieldMapper.php
│ │ │ ├── TypedFieldMapperTest.php
│ │ │ ├── XmlMappingDriverTest.php
│ │ │ ├── invalid_xml/
│ │ │ │ └── Doctrine.Tests.Models.InvalidXml.dcm.xml
│ │ │ ├── php/
│ │ │ │ ├── Doctrine.Tests.Models.Enums.Card.php
│ │ │ │ ├── Doctrine.Tests.Models.TypedProperties.UserTypedWithCustomTypedField.php
│ │ │ │ ├── Doctrine.Tests.Models.Upsertable.Insertable.php
│ │ │ │ ├── Doctrine.Tests.Models.Upsertable.Updatable.php
│ │ │ │ └── Doctrine.Tests.ORM.Mapping.GH10288EnumTypePerson.php
│ │ │ ├── xml/
│ │ │ │ ├── CatNoId.dcm.xml
│ │ │ │ ├── DDC2429Book.orm.xml
│ │ │ │ ├── DDC2429Novel.orm.xml
│ │ │ │ ├── Doctrine.Tests.Models.CMS.CmsAddress.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.CMS.CmsUser.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.Cache.City.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.Company.CompanyContract.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.Company.CompanyFixContract.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.Company.CompanyFlexContract.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.Company.CompanyFlexUltraContract.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.Company.CompanyPerson.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.Customer.CustomerType.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC117.DDC117Translation.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC3293.DDC3293Address.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC3293.DDC3293User.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC3293.DDC3293UserPrefixed.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC3579.DDC3579Admin.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC3579.DDC3579User.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC5934.DDC5934Contract.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC869.DDC869ChequePayment.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC869.DDC869CreditCardPayment.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC869.DDC869Payment.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC889.DDC889Class.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC889.DDC889Entity.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC889.DDC889SuperClass.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC964.DDC964Admin.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC964.DDC964Guest.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.DDC964.DDC964User.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.Enums.Card.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.GH7141.GH7141Article.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.GH7316.GH7316Article.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.Generic.BooleanModel.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.Project.Project.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.Project.ProjectInvalidMapping.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.TypedProperties.UserTyped.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.TypedProperties.UserTypedWithCustomTypedField.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.Upsertable.Insertable.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.Upsertable.Updatable.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.ValueObjects.Name.dcm.xml
│ │ │ │ ├── Doctrine.Tests.Models.ValueObjects.Person.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Functional.XmlLegacyTimeEntity.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Functional.XmlTimeEntity.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.Animal.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.BlogPost.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.BlogPostComment.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.CTI.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.Comment.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.DDC1170Entity.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.DDC807Entity.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.GH10288EnumTypePerson.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.ReservedWordInTableColumn.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.SingleTableEntityIncompleteDiscriminatorColumnMapping.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.SingleTableEntityNoDiscriminatorColumnMapping.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.User.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.UserIncorrectAttributes.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.UserIncorrectIndex.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.UserIncorrectUniqueConstraint.dcm.xml
│ │ │ │ ├── Doctrine.Tests.ORM.Mapping.UserMissingAttributes.dcm.xml
│ │ │ │ └── Doctrine.Tests.ORM.Mapping.XMLSLC.dcm.xml
│ │ │ └── yaml/
│ │ │ ├── Doctrine.Tests.Models.TypedProperties.UserTypedWithCustomTypedField.dcm.yml
│ │ │ └── Doctrine.Tests.ORM.Mapping.GH10288EnumTypePerson.dcm.yml
│ │ ├── ORMInvalidArgumentExceptionTest.php
│ │ ├── ORMSetupTest.php
│ │ ├── Performance/
│ │ │ └── SecondLevelCacheTest.php
│ │ ├── PersistentCollectionTest.php
│ │ ├── Persisters/
│ │ │ ├── BasicEntityPersisterCompositeTypeParametersTest.php
│ │ │ ├── BasicEntityPersisterCompositeTypeSqlTest.php
│ │ │ ├── BasicEntityPersisterTypeValueSqlTest.php
│ │ │ ├── BinaryIdPersisterTest.php
│ │ │ ├── Exception/
│ │ │ │ └── UnrecognizedFieldTest.php
│ │ │ └── ManyToManyPersisterTest.php
│ │ ├── Proxy/
│ │ │ └── ProxyFactoryTest.php
│ │ ├── Query/
│ │ │ ├── CustomTreeWalkersJoinTest.php
│ │ │ ├── CustomTreeWalkersTest.php
│ │ │ ├── DeleteSqlGenerationTest.php
│ │ │ ├── ExprTest.php
│ │ │ ├── FilterCollectionTest.php
│ │ │ ├── LanguageRecognitionTest.php
│ │ │ ├── LexerTest.php
│ │ │ ├── NativeQueryTest.php
│ │ │ ├── ParameterTypeInfererTest.php
│ │ │ ├── ParserResultTest.php
│ │ │ ├── ParserTest.php
│ │ │ ├── QueryExpressionVisitorTest.php
│ │ │ ├── QueryTest.php
│ │ │ ├── SelectSqlGenerationTest.php
│ │ │ ├── SqlExpressionVisitorTest.php
│ │ │ ├── SqlWalkerTest.php
│ │ │ └── UpdateSqlGenerationTest.php
│ │ ├── QueryBuilderTest.php
│ │ ├── Repository/
│ │ │ └── DefaultRepositoryFactoryTest.php
│ │ ├── Tools/
│ │ │ ├── AttachEntityListenersListenerTest.php
│ │ │ ├── Console/
│ │ │ │ ├── Command/
│ │ │ │ │ ├── ClearCacheCollectionRegionCommandTest.php
│ │ │ │ │ ├── ClearCacheEntityRegionCommandTest.php
│ │ │ │ │ ├── ClearCacheQueryRegionCommandTest.php
│ │ │ │ │ ├── Debug/
│ │ │ │ │ │ ├── DebugEntityListenersDoctrineCommandTest.php
│ │ │ │ │ │ ├── DebugEventManagerDoctrineCommandTest.php
│ │ │ │ │ │ └── Fixtures/
│ │ │ │ │ │ ├── BarListener.php
│ │ │ │ │ │ ├── BazListener.php
│ │ │ │ │ │ └── FooListener.php
│ │ │ │ │ ├── InfoCommandTest.php
│ │ │ │ │ ├── MappingDescribeCommandTest.php
│ │ │ │ │ ├── RunDqlCommandTest.php
│ │ │ │ │ ├── SchemaTool/
│ │ │ │ │ │ ├── CommandTestCase.php
│ │ │ │ │ │ ├── CreateCommandTest.php
│ │ │ │ │ │ ├── DropCommandTest.php
│ │ │ │ │ │ └── Models/
│ │ │ │ │ │ └── Keyboard.php
│ │ │ │ │ └── ValidateSchemaCommandTest.php
│ │ │ │ ├── ConsoleRunnerTest.php
│ │ │ │ └── MetadataFilterTest.php
│ │ │ ├── DebugTest.php
│ │ │ ├── Pagination/
│ │ │ │ ├── CountOutputWalkerTest.php
│ │ │ │ ├── CountWalkerTest.php
│ │ │ │ ├── LimitSubqueryOutputWalkerTest.php
│ │ │ │ ├── LimitSubqueryWalkerTest.php
│ │ │ │ ├── PaginationTestCase.php
│ │ │ │ ├── PaginatorTest.php
│ │ │ │ ├── RootTypeWalkerTest.php
│ │ │ │ └── WhereInWalkerTest.php
│ │ │ ├── ResolveTargetEntityListenerTest.php
│ │ │ ├── SchemaToolTest.php
│ │ │ ├── SchemaValidatorTest.php
│ │ │ └── TestAsset/
│ │ │ ├── ChildClass.php
│ │ │ ├── ChildWithSameAttributesClass.php
│ │ │ └── ParentClass.php
│ │ ├── UnitOfWorkTest.php
│ │ └── Utility/
│ │ ├── HierarchyDiscriminatorResolverTest.php
│ │ ├── IdentifierFlattenerEnumIdTest.php
│ │ └── IdentifierFlattenerTest.php
│ ├── OrmFunctionalTestCase.php
│ ├── OrmTestCase.php
│ ├── Proxy/
│ │ └── AutoloaderTest.php
│ ├── TestInit.php
│ └── TestUtil.php
└── dbproperties.xml.dev
Showing preview only (985K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (10195 symbols across 1451 files)
FILE: docs/en/cookbook/dql-custom-walkers/InterpolateParametersSQLOutputWalker.php
class InterpolateParametersSQLOutputWalker (line 10) | class InterpolateParametersSQLOutputWalker extends SqlOutputWalker
method walkInputParameter (line 13) | public function walkInputParameter(AST\InputParameter $inputParam): st...
FILE: docs/en/cookbook/generated-columns/Article.php
class Article (line 7) | #[ORM\Entity]
FILE: docs/en/cookbook/generated-columns/Person.php
class Person (line 7) | #[ORM\Entity]
FILE: docs/en/reference/basic-mapping/DefaultValues.php
class Message (line 12) | #[Entity]
FILE: docs/en/tutorials/working-with-indexed-associations/Market.php
class Market (line 17) | #[Entity]
method __construct (line 33) | public function __construct(string $name)
method getId (line 39) | public function getId(): int|null
method getName (line 44) | public function getName(): string
method addStock (line 49) | public function addStock(Stock $stock): void
method getStock (line 54) | public function getStock(string $symbol): Stock
method getStocks (line 64) | public function getStocks(): array
FILE: src/AbstractQuery.php
class AbstractQuery (line 47) | abstract class AbstractQuery
method __construct (line 143) | public function __construct(
method setCacheable (line 165) | public function setCacheable(bool $cacheable): static
method isCacheable (line 173) | public function isCacheable(): bool
method setCacheRegion (line 179) | public function setCacheRegion(string $cacheRegion): static
method getCacheRegion (line 191) | public function getCacheRegion(): string|null
method isCacheEnabled (line 197) | protected function isCacheEnabled(): bool
method getLifetime (line 202) | public function getLifetime(): int
method setLifetime (line 212) | public function setLifetime(int $lifetime): static
method getCacheMode (line 220) | public function getCacheMode(): int|null
method setCacheMode (line 230) | public function setCacheMode(int $cacheMode): static
method getSQL (line 244) | abstract public function getSQL(): string|array;
method getEntityManager (line 249) | public function getEntityManager(): EntityManagerInterface
method free (line 259) | public function free(): void
method getParameters (line 271) | public function getParameters(): ArrayCollection
method getParameter (line 283) | public function getParameter(int|string $key): Parameter|null
method setParameters (line 302) | public function setParameters(ArrayCollection|array $parameters): static
method setParameter (line 332) | public function setParameter(string|int $key, mixed $value, ParameterT...
method processParameterValue (line 352) | public function processParameterValue(mixed $value): mixed
method potentiallyProcessIterable (line 403) | private function potentiallyProcessIterable(mixed $value): mixed
method processArrayParameterValue (line 420) | private function processArrayParameterValue(array $value): array
method setResultSetMapping (line 435) | public function setResultSetMapping(ResultSetMapping $rsm): static
method getResultSetMapping (line 446) | protected function getResultSetMapping(): ResultSetMapping|null
method translateNamespaces (line 454) | private function translateNamespaces(ResultSetMapping $rsm): void
method setHydrationCacheProfile (line 482) | public function setHydrationCacheProfile(QueryCacheProfile|null $profi...
method getHydrationCacheProfile (line 502) | public function getHydrationCacheProfile(): QueryCacheProfile|null
method setResultCacheProfile (line 515) | public function setResultCacheProfile(QueryCacheProfile|null $profile)...
method setResultCache (line 538) | public function setResultCache(CacheItemPoolInterface|null $resultCach...
method enableResultCache (line 564) | public function enableResultCache(int|null $lifetime = null, string|nu...
method disableResultCache (line 577) | public function disableResultCache(): static
method setResultCacheLifetime (line 591) | public function setResultCacheLifetime(int|null $lifetime): static
method expireResultCache (line 620) | public function expireResultCache(bool $expire = true): static
method getExpireResultCache (line 630) | public function getExpireResultCache(): bool
method getQueryCacheProfile (line 635) | public function getQueryCacheProfile(): QueryCacheProfile|null
method setFetchMode (line 646) | public function setFetchMode(string $class, string $assocName, int $fe...
method setHydrationMode (line 662) | public function setHydrationMode(string|int $hydrationMode): static
method getHydrationMode (line 674) | public function getHydrationMode(): string|int
method getResult (line 686) | public function getResult(string|int $hydrationMode = self::HYDRATE_OB...
method getArrayResult (line 698) | public function getArrayResult(): array
method getSingleColumnResult (line 710) | public function getSingleColumnResult(): array
method getScalarResult (line 722) | public function getScalarResult(): array
method getOneOrNullResult (line 734) | public function getOneOrNullResult(string|int|null $hydrationMode = nu...
method getSingleResult (line 770) | public function getSingleResult(string|int|null $hydrationMode = null)...
method getSingleScalarResult (line 799) | public function getSingleScalarResult(): mixed
method setHint (line 809) | public function setHint(string $name, mixed $value): static
method getHint (line 821) | public function getHint(string $name): mixed
method hasHint (line 826) | public function hasHint(string $name): bool
method getHints (line 836) | public function getHints(): array
method toIterable (line 850) | public function toIterable(
method execute (line 878) | public function execute(
method executeIgnoreQueryCache (line 895) | private function executeIgnoreQueryCache(
method getHydrationCache (line 950) | private function getHydrationCache(): CacheItemPoolInterface
method executeUsingQueryCache (line 966) | private function executeUsingQueryCache(
method getTimestampKey (line 1007) | private function getTimestampKey(): TimestampCacheKey|null
method getHydrationCacheId (line 1029) | protected function getHydrationCacheId(): array
method setResultCacheId (line 1056) | public function setResultCacheId(string|null $id): static
method _doExecute (line 1074) | abstract protected function _doExecute(): Result|int;
method __clone (line 1079) | public function __clone()
method getHash (line 1090) | protected function getHash(): string
FILE: src/Cache.php
type Cache (line 13) | interface Cache
method getEntityCacheRegion (line 41) | public function getEntityCacheRegion(string $className): Region|null;
method getCollectionCacheRegion (line 43) | public function getCollectionCacheRegion(string $className, string $as...
method containsEntity (line 48) | public function containsEntity(string $className, mixed $identifier): ...
method evictEntity (line 53) | public function evictEntity(string $className, mixed $identifier): void;
method evictEntityRegion (line 58) | public function evictEntityRegion(string $className): void;
method evictEntityRegions (line 63) | public function evictEntityRegions(): void;
method containsCollection (line 68) | public function containsCollection(string $className, string $associat...
method evictCollection (line 73) | public function evictCollection(string $className, string $association...
method evictCollectionRegion (line 78) | public function evictCollectionRegion(string $className, string $assoc...
method evictCollectionRegions (line 83) | public function evictCollectionRegions(): void;
method containsQuery (line 88) | public function containsQuery(string $regionName): bool;
method evictQueryRegion (line 93) | public function evictQueryRegion(string|null $regionName = null): void;
method evictQueryRegions (line 98) | public function evictQueryRegions(): void;
method getQueryCache (line 105) | public function getQueryCache(string|null $regionName = null): QueryCa...
FILE: src/Cache/AssociationCacheEntry.php
class AssociationCacheEntry (line 7) | class AssociationCacheEntry implements CacheEntry
method __construct (line 13) | public function __construct(
method __set_state (line 26) | public static function __set_state(array $values): self
FILE: src/Cache/CacheConfiguration.php
class CacheConfiguration (line 12) | class CacheConfiguration
method getCacheFactory (line 19) | public function getCacheFactory(): CacheFactory|null
method setCacheFactory (line 24) | public function setCacheFactory(CacheFactory $factory): void
method getCacheLogger (line 29) | public function getCacheLogger(): CacheLogger|null
method setCacheLogger (line 34) | public function setCacheLogger(CacheLogger $logger): void
method getRegionsConfiguration (line 39) | public function getRegionsConfiguration(): RegionsConfiguration
method setRegionsConfiguration (line 44) | public function setRegionsConfiguration(RegionsConfiguration $regionsC...
method getQueryValidator (line 49) | public function getQueryValidator(): QueryCacheValidator
method setQueryValidator (line 56) | public function setQueryValidator(QueryCacheValidator $validator): void
FILE: src/Cache/CacheEntry.php
type CacheEntry (line 14) | interface CacheEntry
FILE: src/Cache/CacheException.php
class CacheException (line 15) | class CacheException extends LogicException implements ORMException
method updateReadOnlyCollection (line 17) | public static function updateReadOnlyCollection(string $sourceEntity, ...
method nonCacheableEntity (line 22) | public static function nonCacheableEntity(string $entityName): self
FILE: src/Cache/CacheFactory.php
type CacheFactory (line 19) | interface CacheFactory
method buildCachedEntityPersister (line 24) | public function buildCachedEntityPersister(EntityManagerInterface $em,...
method buildCachedCollectionPersister (line 27) | public function buildCachedCollectionPersister(
method buildQueryCache (line 36) | public function buildQueryCache(EntityManagerInterface $em, string|nul...
method buildEntityHydrator (line 41) | public function buildEntityHydrator(EntityManagerInterface $em, ClassM...
method buildCollectionHydrator (line 46) | public function buildCollectionHydrator(EntityManagerInterface $em, As...
method getRegion (line 53) | public function getRegion(array $cache): Region;
method getTimestampRegion (line 58) | public function getTimestampRegion(): TimestampRegion;
method createCache (line 63) | public function createCache(EntityManagerInterface $entityManager): Ca...
FILE: src/Cache/CacheKey.php
class CacheKey (line 11) | abstract class CacheKey
method __construct (line 13) | public function __construct(public readonly string $hash)
FILE: src/Cache/CollectionCacheEntry.php
class CollectionCacheEntry (line 7) | class CollectionCacheEntry implements CacheEntry
method __construct (line 10) | public function __construct(public readonly array $identifiers)
method __set_state (line 21) | public static function __set_state(array $values): CollectionCacheEntry
FILE: src/Cache/CollectionCacheKey.php
class CollectionCacheKey (line 15) | class CollectionCacheKey extends CacheKey
method __construct (line 28) | public function __construct(
FILE: src/Cache/CollectionHydrator.php
type CollectionHydrator (line 14) | interface CollectionHydrator
method buildCacheEntry (line 17) | public function buildCacheEntry(ClassMetadata $metadata, CollectionCac...
method loadCacheEntry (line 20) | public function loadCacheEntry(ClassMetadata $metadata, CollectionCach...
FILE: src/Cache/ConcurrentRegion.php
type ConcurrentRegion (line 14) | interface ConcurrentRegion extends Region
method lock (line 25) | public function lock(CacheKey $key): Lock|null;
method unlock (line 35) | public function unlock(CacheKey $key, Lock $lock): bool;
FILE: src/Cache/DefaultCache.php
class DefaultCache (line 21) | class DefaultCache implements Cache
method __construct (line 34) | public function __construct(
method getEntityCacheRegion (line 43) | public function getEntityCacheRegion(string $className): Region|null
method getCollectionCacheRegion (line 55) | public function getCollectionCacheRegion(string $className, string $as...
method containsEntity (line 67) | public function containsEntity(string $className, mixed $identifier): ...
method evictEntity (line 79) | public function evictEntity(string $className, mixed $identifier): void
method evictEntityRegion (line 91) | public function evictEntityRegion(string $className): void
method evictEntityRegions (line 103) | public function evictEntityRegions(): void
method containsCollection (line 118) | public function containsCollection(string $className, string $associat...
method evictCollection (line 130) | public function evictCollection(string $className, string $association...
method evictCollectionRegion (line 142) | public function evictCollectionRegion(string $className, string $assoc...
method evictCollectionRegions (line 154) | public function evictCollectionRegions(): void
method containsQuery (line 175) | public function containsQuery(string $regionName): bool
method evictQueryRegion (line 180) | public function evictQueryRegion(string|null $regionName = null): void
method evictQueryRegions (line 193) | public function evictQueryRegions(): void
method getQueryCache (line 202) | public function getQueryCache(string|null $regionName = null): QueryCache
method buildEntityCacheKey (line 211) | private function buildEntityCacheKey(ClassMetadata $metadata, mixed $i...
method buildCollectionCacheKey (line 220) | private function buildCollectionCacheKey(
method toIdentifierArray (line 233) | private function toIdentifierArray(ClassMetadata $metadata, mixed $ide...
FILE: src/Cache/DefaultCacheFactory.php
class DefaultCacheFactory (line 33) | class DefaultCacheFactory implements CacheFactory
method __construct (line 42) | public function __construct(private readonly RegionsConfiguration $reg...
method setFileLockRegionDirectory (line 46) | public function setFileLockRegionDirectory(string $fileLockRegionDirec...
method getFileLockRegionDirectory (line 51) | public function getFileLockRegionDirectory(): string|null
method setRegion (line 56) | public function setRegion(Region $region): void
method setTimestampRegion (line 61) | public function setTimestampRegion(TimestampRegion $region): void
method buildCachedEntityPersister (line 66) | public function buildCachedEntityPersister(EntityManagerInterface $em,...
method buildCachedCollectionPersister (line 91) | public function buildCachedCollectionPersister(
method buildQueryCache (line 119) | public function buildQueryCache(EntityManagerInterface $em, string|nul...
method buildCollectionHydrator (line 132) | public function buildCollectionHydrator(EntityManagerInterface $em, As...
method buildEntityHydrator (line 137) | public function buildEntityHydrator(EntityManagerInterface $em, ClassM...
method getRegion (line 145) | public function getRegion(array $cache): Region
method getTimestampRegion (line 173) | public function getTimestampRegion(): TimestampRegion
method createCache (line 185) | public function createCache(EntityManagerInterface $entityManager): Cache
FILE: src/Cache/DefaultCollectionHydrator.php
class DefaultCollectionHydrator (line 20) | class DefaultCollectionHydrator implements CollectionHydrator
method __construct (line 27) | public function __construct(
method buildCacheEntry (line 33) | public function buildCacheEntry(ClassMetadata $metadata, CollectionCac...
method loadCacheEntry (line 44) | public function loadCacheEntry(ClassMetadata $metadata, CollectionCach...
FILE: src/Cache/DefaultEntityHydrator.php
class DefaultEntityHydrator (line 22) | class DefaultEntityHydrator implements EntityHydrator
method __construct (line 30) | public function __construct(
method buildCacheEntry (line 37) | public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKe...
method loadCacheEntry (line 128) | public function loadCacheEntry(ClassMetadata $metadata, EntityCacheKey...
FILE: src/Cache/DefaultQueryCache.php
class DefaultQueryCache (line 34) | class DefaultQueryCache implements QueryCache
method __construct (line 43) | public function __construct(
method get (line 57) | public function get(QueryCacheKey $key, ResultSetMapping $rsm, array $...
method put (line 200) | public function put(QueryCacheKey $key, ResultSetMapping $rsm, mixed $...
method storeAssociationCache (line 301) | private function storeAssociationCache(QueryCacheKey $key, Association...
method getAssociationValue (line 351) | private function getAssociationValue(
method getAssociationPathValue (line 380) | private function getAssociationPathValue(mixed $value, array $path): a...
method clear (line 409) | public function clear(): bool
method getRegion (line 414) | public function getRegion(): Region
FILE: src/Cache/EntityCacheEntry.php
class EntityCacheEntry (line 11) | class EntityCacheEntry implements CacheEntry
method __construct (line 17) | public function __construct(
method __set_state (line 30) | public static function __set_state(array $values): self
method resolveAssociationEntries (line 40) | public function resolveAssociationEntries(EntityManagerInterface $em):...
FILE: src/Cache/EntityCacheKey.php
class EntityCacheKey (line 15) | class EntityCacheKey extends CacheKey
method __construct (line 28) | public function __construct(
FILE: src/Cache/EntityHydrator.php
type EntityHydrator (line 12) | interface EntityHydrator
method buildCacheEntry (line 19) | public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKe...
method loadCacheEntry (line 27) | public function loadCacheEntry(ClassMetadata $metadata, EntityCacheKey...
FILE: src/Cache/Exception/CacheException.php
class CacheException (line 12) | class CacheException extends BaseCacheException
FILE: src/Cache/Exception/CannotUpdateReadOnlyCollection.php
class CannotUpdateReadOnlyCollection (line 9) | class CannotUpdateReadOnlyCollection extends CacheException
method fromEntityAndField (line 11) | public static function fromEntityAndField(string $sourceEntity, string...
FILE: src/Cache/Exception/CannotUpdateReadOnlyEntity.php
class CannotUpdateReadOnlyEntity (line 9) | class CannotUpdateReadOnlyEntity extends CacheException
method fromEntity (line 11) | public static function fromEntity(string $entityName): self
FILE: src/Cache/Exception/FeatureNotImplemented.php
class FeatureNotImplemented (line 7) | class FeatureNotImplemented extends CacheException
method scalarResults (line 9) | public static function scalarResults(): self
method multipleRootEntities (line 14) | public static function multipleRootEntities(): self
method nonSelectStatements (line 19) | public static function nonSelectStatements(): self
method partialEntities (line 24) | public static function partialEntities(): self
FILE: src/Cache/Exception/NonCacheableEntity.php
class NonCacheableEntity (line 9) | class NonCacheableEntity extends CacheException
method fromEntity (line 11) | public static function fromEntity(string $entityName): self
FILE: src/Cache/Exception/NonCacheableEntityAssociation.php
class NonCacheableEntityAssociation (line 9) | class NonCacheableEntityAssociation extends CacheException
method fromEntityAndField (line 11) | public static function fromEntityAndField(string $entityName, string $...
FILE: src/Cache/Lock.php
class Lock (line 10) | class Lock
method __construct (line 14) | public function __construct(
method createLockRead (line 21) | public static function createLockRead(): Lock
FILE: src/Cache/LockException.php
class LockException (line 12) | class LockException extends CacheException
FILE: src/Cache/Logging/CacheLogger.php
type CacheLogger (line 14) | interface CacheLogger
method entityCachePut (line 19) | public function entityCachePut(string $regionName, EntityCacheKey $key...
method entityCacheHit (line 24) | public function entityCacheHit(string $regionName, EntityCacheKey $key...
method entityCacheMiss (line 29) | public function entityCacheMiss(string $regionName, EntityCacheKey $ke...
method collectionCachePut (line 34) | public function collectionCachePut(string $regionName, CollectionCache...
method collectionCacheHit (line 39) | public function collectionCacheHit(string $regionName, CollectionCache...
method collectionCacheMiss (line 44) | public function collectionCacheMiss(string $regionName, CollectionCach...
method queryCachePut (line 49) | public function queryCachePut(string $regionName, QueryCacheKey $key):...
method queryCacheHit (line 54) | public function queryCacheHit(string $regionName, QueryCacheKey $key):...
method queryCacheMiss (line 59) | public function queryCacheMiss(string $regionName, QueryCacheKey $key)...
FILE: src/Cache/Logging/CacheLoggerChain.php
class CacheLoggerChain (line 11) | class CacheLoggerChain implements CacheLogger
method setLogger (line 16) | public function setLogger(string $name, CacheLogger $logger): void
method getLogger (line 21) | public function getLogger(string $name): CacheLogger|null
method getLoggers (line 27) | public function getLoggers(): array
method collectionCacheHit (line 32) | public function collectionCacheHit(string $regionName, CollectionCache...
method collectionCacheMiss (line 39) | public function collectionCacheMiss(string $regionName, CollectionCach...
method collectionCachePut (line 46) | public function collectionCachePut(string $regionName, CollectionCache...
method entityCacheHit (line 53) | public function entityCacheHit(string $regionName, EntityCacheKey $key...
method entityCacheMiss (line 60) | public function entityCacheMiss(string $regionName, EntityCacheKey $ke...
method entityCachePut (line 67) | public function entityCachePut(string $regionName, EntityCacheKey $key...
method queryCacheHit (line 74) | public function queryCacheHit(string $regionName, QueryCacheKey $key):...
method queryCacheMiss (line 81) | public function queryCacheMiss(string $regionName, QueryCacheKey $key)...
method queryCachePut (line 88) | public function queryCachePut(string $regionName, QueryCacheKey $key):...
FILE: src/Cache/Logging/StatisticsCacheLogger.php
class StatisticsCacheLogger (line 16) | class StatisticsCacheLogger implements CacheLogger
method collectionCacheMiss (line 27) | public function collectionCacheMiss(string $regionName, CollectionCach...
method collectionCacheHit (line 33) | public function collectionCacheHit(string $regionName, CollectionCache...
method collectionCachePut (line 39) | public function collectionCachePut(string $regionName, CollectionCache...
method entityCacheMiss (line 45) | public function entityCacheMiss(string $regionName, EntityCacheKey $ke...
method entityCacheHit (line 51) | public function entityCacheHit(string $regionName, EntityCacheKey $key...
method entityCachePut (line 57) | public function entityCachePut(string $regionName, EntityCacheKey $key...
method queryCacheHit (line 63) | public function queryCacheHit(string $regionName, QueryCacheKey $key):...
method queryCacheMiss (line 69) | public function queryCacheMiss(string $regionName, QueryCacheKey $key)...
method queryCachePut (line 75) | public function queryCachePut(string $regionName, QueryCacheKey $key):...
method getRegionHitCount (line 86) | public function getRegionHitCount(string $regionName): int
method getRegionMissCount (line 96) | public function getRegionMissCount(string $regionName): int
method getRegionPutCount (line 106) | public function getRegionPutCount(string $regionName): int
method getRegionsMiss (line 112) | public function getRegionsMiss(): array
method getRegionsHit (line 118) | public function getRegionsHit(): array
method getRegionsPut (line 124) | public function getRegionsPut(): array
method clearRegionStats (line 134) | public function clearRegionStats(string $regionName): void
method clearStats (line 144) | public function clearStats(): void
method getPutCount (line 154) | public function getPutCount(): int
method getHitCount (line 162) | public function getHitCount(): int
method getMissCount (line 170) | public function getMissCount(): int
FILE: src/Cache/Persister/CachedPersister.php
type CachedPersister (line 12) | interface CachedPersister
method afterTransactionComplete (line 17) | public function afterTransactionComplete(): void;
method afterTransactionRolledBack (line 22) | public function afterTransactionRolledBack(): void;
method getCacheRegion (line 24) | public function getCacheRegion(): Region;
FILE: src/Cache/Persister/Collection/AbstractCollectionPersister.php
class AbstractCollectionPersister (line 28) | abstract class AbstractCollectionPersister implements CachedCollectionPe...
method __construct (line 43) | public function __construct(
method getCacheRegion (line 66) | public function getCacheRegion(): Region
method getSourceEntityMetadata (line 71) | public function getSourceEntityMetadata(): ClassMetadata
method getTargetEntityMetadata (line 76) | public function getTargetEntityMetadata(): ClassMetadata
method loadCollectionCache (line 81) | public function loadCollectionCache(PersistentCollection $collection, ...
method storeCollectionCache (line 92) | public function storeCollectionCache(CollectionCacheKey $key, Collecti...
method contains (line 131) | public function contains(PersistentCollection $collection, object $ele...
method containsKey (line 136) | public function containsKey(PersistentCollection $collection, mixed $k...
method count (line 141) | public function count(PersistentCollection $collection): int
method get (line 154) | public function get(PersistentCollection $collection, mixed $index): m...
method slice (line 162) | public function slice(PersistentCollection $collection, int $offset, i...
method loadCriteria (line 170) | public function loadCriteria(PersistentCollection $collection, Criteri...
FILE: src/Cache/Persister/Collection/CachedCollectionPersister.php
type CachedCollectionPersister (line 17) | interface CachedCollectionPersister extends CachedPersister, CollectionP...
method getSourceEntityMetadata (line 19) | public function getSourceEntityMetadata(): ClassMetadata;
method getTargetEntityMetadata (line 21) | public function getTargetEntityMetadata(): ClassMetadata;
method loadCollectionCache (line 28) | public function loadCollectionCache(PersistentCollection $collection, ...
method storeCollectionCache (line 35) | public function storeCollectionCache(CollectionCacheKey $key, Collecti...
FILE: src/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersister.php
class NonStrictReadWriteCachedCollectionPersister (line 12) | class NonStrictReadWriteCachedCollectionPersister extends AbstractCollec...
method afterTransactionComplete (line 14) | public function afterTransactionComplete(): void
method afterTransactionRolledBack (line 31) | public function afterTransactionRolledBack(): void
method delete (line 36) | public function delete(PersistentCollection $collection): void
method update (line 46) | public function update(PersistentCollection $collection): void
FILE: src/Cache/Persister/Collection/ReadOnlyCachedCollectionPersister.php
class ReadOnlyCachedCollectionPersister (line 11) | class ReadOnlyCachedCollectionPersister extends NonStrictReadWriteCached...
method update (line 13) | public function update(PersistentCollection $collection): void
FILE: src/Cache/Persister/Collection/ReadWriteCachedCollectionPersister.php
class ReadWriteCachedCollectionPersister (line 16) | class ReadWriteCachedCollectionPersister extends AbstractCollectionPersi...
method __construct (line 18) | public function __construct(
method afterTransactionComplete (line 27) | public function afterTransactionComplete(): void
method afterTransactionRolledBack (line 44) | public function afterTransactionRolledBack(): void
method delete (line 61) | public function delete(PersistentCollection $collection): void
method update (line 79) | public function update(PersistentCollection $collection): void
FILE: src/Cache/Persister/Entity/AbstractEntityPersister.php
class AbstractEntityPersister (line 36) | abstract class AbstractEntityPersister implements CachedEntityPersister
method __construct (line 59) | public function __construct(
method addInsert (line 80) | public function addInsert(object $entity): void
method getInserts (line 88) | public function getInserts(): array
method getSelectSQL (line 93) | public function getSelectSQL(
method getCountSQL (line 104) | public function getCountSQL(array|Criteria $criteria = []): string
method getInsertSQL (line 109) | public function getInsertSQL(): string
method getResultSetMapping (line 114) | public function getResultSetMapping(): ResultSetMapping
method getSelectConditionStatementSQL (line 119) | public function getSelectConditionStatementSQL(
method exists (line 128) | public function exists(object $entity, Criteria|null $extraConditions ...
method getCacheRegion (line 141) | public function getCacheRegion(): Region
method getEntityHydrator (line 146) | public function getEntityHydrator(): EntityHydrator
method storeEntityCache (line 151) | public function storeEntityCache(object $entity, EntityCacheKey $key):...
method storeJoinedAssociations (line 170) | private function storeJoinedAssociations(object $entity): void
method getHash (line 211) | protected function getHash(
method expandParameters (line 228) | public function expandParameters(array $criteria): array
method expandCriteriaParameters (line 236) | public function expandCriteriaParameters(Criteria $criteria): array
method getClassMetadata (line 241) | public function getClassMetadata(): ClassMetadata
method getManyToManyCollection (line 249) | public function getManyToManyCollection(
method getOneToManyCollection (line 261) | public function getOneToManyCollection(
method getOwningTable (line 270) | public function getOwningTable(string $fieldName): string
method executeInserts (line 275) | public function executeInserts(): void
method load (line 291) | public function load(
method loadAll (line 338) | public function loadAll(
method loadById (line 374) | public function loadById(array $identifier, object|null $entity = null...
method count (line 423) | public function count(array|Criteria $criteria = []): int
method loadCriteria (line 431) | public function loadCriteria(Criteria $criteria): array
method loadManyToManyCollection (line 466) | public function loadManyToManyCollection(
method loadOneToManyCollection (line 497) | public function loadOneToManyCollection(
method loadOneToOneEntity (line 531) | public function loadOneToOneEntity(AssociationMapping $assoc, object $...
method lock (line 539) | public function lock(array $criteria, LockMode|int $lockMode): void
method refresh (line 547) | public function refresh(array $id, object $entity, LockMode|int|null $...
method buildCollectionCacheKey (line 553) | protected function buildCollectionCacheKey(AssociationMapping $associa...
FILE: src/Cache/Persister/Entity/CachedEntityPersister.php
type CachedEntityPersister (line 15) | interface CachedEntityPersister extends CachedPersister, EntityPersister
method getEntityHydrator (line 17) | public function getEntityHydrator(): EntityHydrator;
method storeEntityCache (line 19) | public function storeEntityCache(object $entity, EntityCacheKey $key):...
FILE: src/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersister.php
class NonStrictReadWriteCachedEntityPersister (line 12) | class NonStrictReadWriteCachedEntityPersister extends AbstractEntityPers...
method afterTransactionComplete (line 14) | public function afterTransactionComplete(): void
method afterTransactionRolledBack (line 45) | public function afterTransactionRolledBack(): void
method delete (line 50) | public function delete(object $entity): bool
method update (line 64) | public function update(object $entity): void
method updateCache (line 71) | private function updateCache(object $entity, bool $isChanged): bool
FILE: src/Cache/Persister/Entity/ReadOnlyCachedEntityPersister.php
class ReadOnlyCachedEntityPersister (line 13) | class ReadOnlyCachedEntityPersister extends NonStrictReadWriteCachedEnti...
method update (line 15) | public function update(object $entity): void
FILE: src/Cache/Persister/Entity/ReadWriteCachedEntityPersister.php
class ReadWriteCachedEntityPersister (line 16) | class ReadWriteCachedEntityPersister extends AbstractEntityPersister
method __construct (line 18) | public function __construct(EntityPersister $persister, ConcurrentRegi...
method afterTransactionComplete (line 23) | public function afterTransactionComplete(): void
method afterTransactionRolledBack (line 50) | public function afterTransactionRolledBack(): void
method delete (line 67) | public function delete(object $entity): bool
method update (line 89) | public function update(object $entity): void
FILE: src/Cache/QueryCache.php
type QueryCache (line 13) | interface QueryCache
method clear (line 15) | public function clear(): bool;
method put (line 18) | public function put(QueryCacheKey $key, ResultSetMapping $rsm, mixed $...
method get (line 25) | public function get(QueryCacheKey $key, ResultSetMapping $rsm, array $...
method getRegion (line 27) | public function getRegion(): Region;
FILE: src/Cache/QueryCacheEntry.php
class QueryCacheEntry (line 9) | class QueryCacheEntry implements CacheEntry
method __construct (line 17) | public function __construct(
method __set_state (line 25) | public static function __set_state(array $values): self
FILE: src/Cache/QueryCacheKey.php
class QueryCacheKey (line 12) | class QueryCacheKey extends CacheKey
method __construct (line 15) | public function __construct(
FILE: src/Cache/QueryCacheValidator.php
type QueryCacheValidator (line 10) | interface QueryCacheValidator
method isValid (line 15) | public function isValid(QueryCacheKey $key, QueryCacheEntry $entry): b...
FILE: src/Cache/Region.php
type Region (line 12) | interface Region
method getName (line 17) | public function getName(): string;
method contains (line 24) | public function contains(CacheKey $key): bool;
method get (line 35) | public function get(CacheKey $key): CacheEntry|null;
method getMultiple (line 45) | public function getMultiple(CollectionCacheEntry $collection): array|n...
method put (line 56) | public function put(CacheKey $key, CacheEntry $entry, Lock|null $lock ...
method evict (line 65) | public function evict(CacheKey $key): bool;
method evictAll (line 72) | public function evictAll(): bool;
FILE: src/Cache/Region/DefaultRegion.php
class DefaultRegion (line 23) | class DefaultRegion implements Region
method __construct (line 28) | public function __construct(
method getName (line 35) | public function getName(): string
method contains (line 40) | public function contains(CacheKey $key): bool
method get (line 45) | public function get(CacheKey $key): CacheEntry|null
method getMultiple (line 57) | public function getMultiple(CollectionCacheEntry $collection): array|null
method put (line 86) | public function put(CacheKey $key, CacheEntry $entry, Lock|null $lock ...
method evict (line 99) | public function evict(CacheKey $key): bool
method evictAll (line 104) | public function evictAll(): bool
method getCacheEntryKey (line 109) | private function getCacheEntryKey(CacheKey $key): string
FILE: src/Cache/Region/FileLockRegion.php
class FileLockRegion (line 36) | class FileLockRegion implements ConcurrentRegion
method __construct (line 45) | public function __construct(
method isLocked (line 59) | private function isLocked(CacheKey $key, Lock|null $lock = null): bool
method getLockFileName (line 90) | private function getLockFileName(CacheKey $key): string
method getLockContent (line 95) | private function getLockContent(string $filename): string|false
method getLockTime (line 100) | private function getLockTime(string $filename): int|false
method getName (line 105) | public function getName(): string
method contains (line 110) | public function contains(CacheKey $key): bool
method get (line 119) | public function get(CacheKey $key): CacheEntry|null
method getMultiple (line 128) | public function getMultiple(CollectionCacheEntry $collection): array|null
method put (line 137) | public function put(CacheKey $key, CacheEntry $entry, Lock|null $lock ...
method evict (line 146) | public function evict(CacheKey $key): bool
method evictAll (line 155) | public function evictAll(): bool
method lock (line 168) | public function lock(CacheKey $key): Lock|null
method unlock (line 186) | public function unlock(CacheKey $key, Lock $lock): bool
FILE: src/Cache/Region/UpdateTimestampCache.php
class UpdateTimestampCache (line 14) | class UpdateTimestampCache extends DefaultRegion implements TimestampRegion
method update (line 16) | public function update(CacheKey $key): void
FILE: src/Cache/RegionsConfiguration.php
class RegionsConfiguration (line 10) | class RegionsConfiguration
method __construct (line 18) | public function __construct(
method getDefaultLifetime (line 24) | public function getDefaultLifetime(): int
method setDefaultLifetime (line 29) | public function setDefaultLifetime(int $defaultLifetime): void
method getDefaultLockLifetime (line 34) | public function getDefaultLockLifetime(): int
method setDefaultLockLifetime (line 39) | public function setDefaultLockLifetime(int $defaultLockLifetime): void
method getLifetime (line 44) | public function getLifetime(string $regionName): int
method setLifetime (line 49) | public function setLifetime(string $name, int $lifetime): void
method getLockLifetime (line 54) | public function getLockLifetime(string $regionName): int
method setLockLifetime (line 59) | public function setLockLifetime(string $name, int $lifetime): void
FILE: src/Cache/TimestampCacheEntry.php
class TimestampCacheEntry (line 9) | class TimestampCacheEntry implements CacheEntry
method __construct (line 13) | public function __construct(float|null $time = null)
method __set_state (line 25) | public static function __set_state(array $values): TimestampCacheEntry
FILE: src/Cache/TimestampCacheKey.php
class TimestampCacheKey (line 10) | class TimestampCacheKey extends CacheKey
method __construct (line 13) | public function __construct(string $space)
FILE: src/Cache/TimestampQueryCacheValidator.php
class TimestampQueryCacheValidator (line 9) | class TimestampQueryCacheValidator implements QueryCacheValidator
method __construct (line 11) | public function __construct(private readonly TimestampRegion $timestam...
method isValid (line 15) | public function isValid(QueryCacheKey $key, QueryCacheEntry $entry): bool
method regionUpdated (line 28) | private function regionUpdated(QueryCacheKey $key, QueryCacheEntry $en...
FILE: src/Cache/TimestampRegion.php
type TimestampRegion (line 10) | interface TimestampRegion extends Region
method update (line 17) | public function update(CacheKey $key): void;
FILE: src/Configuration.php
class Configuration (line 42) | class Configuration extends \Doctrine\DBAL\Configuration
method setIdentityGenerationPreferences (line 51) | public function setIdentityGenerationPreferences(array $value): void
method getIdentityGenerationPreferences (line 57) | public function getIdentityGenerationPreferences(): array
method setProxyDir (line 65) | public function setProxyDir(string $dir): void
method getProxyDir (line 82) | public function getProxyDir(): string|null
method getAutoGenerateProxyClasses (line 101) | public function getAutoGenerateProxyClasses(): int
method setAutoGenerateProxyClasses (line 120) | public function setAutoGenerateProxyClasses(bool|int $autoGenerate): void
method getProxyNamespace (line 137) | public function getProxyNamespace(): string|null
method setProxyNamespace (line 154) | public function setProxyNamespace(string $ns): void
method setMetadataDriverImpl (line 174) | public function setMetadataDriverImpl(MappingDriver $driverImpl): void
method setEntityNamespaces (line 184) | public function setEntityNamespaces(array $entityNamespaces): void
method getEntityNamespaces (line 194) | public function getEntityNamespaces(): array
method getMetadataDriverImpl (line 202) | public function getMetadataDriverImpl(): MappingDriver|null
method getQueryCache (line 210) | public function getQueryCache(): CacheItemPoolInterface|null
method setQueryCache (line 218) | public function setQueryCache(CacheItemPoolInterface $cache): void
method getHydrationCache (line 223) | public function getHydrationCache(): CacheItemPoolInterface|null
method setHydrationCache (line 228) | public function setHydrationCache(CacheItemPoolInterface $cache): void
method getMetadataCache (line 233) | public function getMetadataCache(): CacheItemPoolInterface|null
method setMetadataCache (line 238) | public function setMetadataCache(CacheItemPoolInterface $cache): void
method addCustomStringFunction (line 253) | public function addCustomStringFunction(string $name, string|callable ...
method getCustomStringFunction (line 263) | public function getCustomStringFunction(string $name): string|callable...
method setCustomStringFunctions (line 281) | public function setCustomStringFunctions(array $functions): void
method addCustomNumericFunction (line 298) | public function addCustomNumericFunction(string $name, string|callable...
method getCustomNumericFunction (line 308) | public function getCustomNumericFunction(string $name): string|callabl...
method setCustomNumericFunctions (line 326) | public function setCustomNumericFunctions(array $functions): void
method addCustomDatetimeFunction (line 343) | public function addCustomDatetimeFunction(string $name, string|callabl...
method getCustomDatetimeFunction (line 353) | public function getCustomDatetimeFunction(string $name): string|callab...
method setCustomDatetimeFunctions (line 371) | public function setCustomDatetimeFunctions(array $functions): void
method setTypedFieldMapper (line 381) | public function setTypedFieldMapper(TypedFieldMapper|null $typedFieldM...
method getTypedFieldMapper (line 389) | public function getTypedFieldMapper(): TypedFieldMapper|null
method setCustomHydrationModes (line 399) | public function setCustomHydrationModes(array $modes): void
method getCustomHydrationMode (line 413) | public function getCustomHydrationMode(string $modeName): string|null
method addCustomHydrationMode (line 423) | public function addCustomHydrationMode(string $modeName, string $hydra...
method setClassMetadataFactoryName (line 433) | public function setClassMetadataFactoryName(string $cmfName): void
method getClassMetadataFactoryName (line 439) | public function getClassMetadataFactoryName(): string
method addFilter (line 453) | public function addFilter(string $name, string $className): void
method getFilterClassName (line 464) | public function getFilterClassName(string $name): string|null
method setDefaultRepositoryClassName (line 476) | public function setDefaultRepositoryClassName(string $className): void
method getDefaultRepositoryClassName (line 490) | public function getDefaultRepositoryClassName(): string
method setNamingStrategy (line 498) | public function setNamingStrategy(NamingStrategy $namingStrategy): void
method getNamingStrategy (line 506) | public function getNamingStrategy(): NamingStrategy
method setQuoteStrategy (line 518) | public function setQuoteStrategy(QuoteStrategy $quoteStrategy): void
method getQuoteStrategy (line 526) | public function getQuoteStrategy(): QuoteStrategy
method setEntityListenerResolver (line 538) | public function setEntityListenerResolver(EntityListenerResolver $reso...
method getEntityListenerResolver (line 546) | public function getEntityListenerResolver(): EntityListenerResolver
method setRepositoryFactory (line 558) | public function setRepositoryFactory(RepositoryFactory $repositoryFact...
method getRepositoryFactory (line 566) | public function getRepositoryFactory(): RepositoryFactory
method isSecondLevelCacheEnabled (line 571) | public function isSecondLevelCacheEnabled(): bool
method setSecondLevelCacheEnabled (line 576) | public function setSecondLevelCacheEnabled(bool $flag = true): void
method setSecondLevelCacheConfiguration (line 581) | public function setSecondLevelCacheConfiguration(CacheConfiguration $c...
method getSecondLevelCacheConfiguration (line 586) | public function getSecondLevelCacheConfiguration(): CacheConfiguration...
method getDefaultQueryHints (line 600) | public function getDefaultQueryHints(): array
method setDefaultQueryHints (line 610) | public function setDefaultQueryHints(array $defaultQueryHints): void
method getDefaultQueryHint (line 620) | public function getDefaultQueryHint(string $name): mixed
method setDefaultQueryHint (line 628) | public function setDefaultQueryHint(string $name, mixed $value): void
method getSchemaIgnoreClasses (line 638) | public function getSchemaIgnoreClasses(): array
method setSchemaIgnoreClasses (line 648) | public function setSchemaIgnoreClasses(array $schemaIgnoreClasses): void
method isNativeLazyObjectsEnabled (line 653) | public function isNativeLazyObjectsEnabled(): bool
method enableNativeLazyObjects (line 658) | public function enableNativeLazyObjects(bool $nativeLazyObjects): void
method isLazyGhostObjectEnabled (line 680) | public function isLazyGhostObjectEnabled(): bool
method setLazyGhostObjectEnabled (line 686) | public function setLazyGhostObjectEnabled(bool $flag): void
method setRejectIdCollisionInIdentityMap (line 697) | public function setRejectIdCollisionInIdentityMap(bool $flag): void
method isRejectIdCollisionInIdentityMapEnabled (line 712) | public function isRejectIdCollisionInIdentityMapEnabled(): bool
method setEagerFetchBatchSize (line 717) | public function setEagerFetchBatchSize(int $batchSize = 100): void
method getEagerFetchBatchSize (line 722) | public function getEagerFetchBatchSize(): int
FILE: src/Decorator/EntityManagerDecorator.php
class EntityManagerDecorator (line 33) | abstract class EntityManagerDecorator extends ObjectManagerDecorator imp...
method __construct (line 35) | public function __construct(EntityManagerInterface $wrapped)
method getRepository (line 40) | public function getRepository(string $className): EntityRepository
method getMetadataFactory (line 45) | public function getMetadataFactory(): ClassMetadataFactory
method getClassMetadata (line 50) | public function getClassMetadata(string $className): ClassMetadata
method getConnection (line 55) | public function getConnection(): Connection
method getExpressionBuilder (line 60) | public function getExpressionBuilder(): Expr
method beginTransaction (line 65) | public function beginTransaction(): void
method wrapInTransaction (line 70) | public function wrapInTransaction(callable $func): mixed
method commit (line 75) | public function commit(): void
method rollback (line 80) | public function rollback(): void
method createQuery (line 85) | public function createQuery(string $dql = ''): Query
method createNativeQuery (line 90) | public function createNativeQuery(string $sql, ResultSetMapping $rsm):...
method createQueryBuilder (line 95) | public function createQueryBuilder(): QueryBuilder
method getReference (line 100) | public function getReference(string $entityName, mixed $id): object|null
method close (line 105) | public function close(): void
method lock (line 110) | public function lock(object $entity, LockMode|int $lockMode, DateTimeI...
method find (line 115) | public function find(string $className, mixed $id, LockMode|int|null $...
method refresh (line 120) | public function refresh(object $object, LockMode|int|null $lockMode = ...
method getEventManager (line 125) | public function getEventManager(): EventManager
method getConfiguration (line 130) | public function getConfiguration(): Configuration
method isOpen (line 135) | public function isOpen(): bool
method getUnitOfWork (line 140) | public function getUnitOfWork(): UnitOfWork
method newHydrator (line 145) | public function newHydrator(string|int $hydrationMode): AbstractHydrator
method getProxyFactory (line 150) | public function getProxyFactory(): ProxyFactory
method getFilters (line 155) | public function getFilters(): FilterCollection
method isFiltersStateClean (line 160) | public function isFiltersStateClean(): bool
method hasFilters (line 165) | public function hasFilters(): bool
method getCache (line 170) | public function getCache(): Cache|null
FILE: src/EntityManager.php
class EntityManager (line 60) | class EntityManager implements EntityManagerInterface
method __construct (line 113) | public function __construct(
method getConnection (line 155) | public function getConnection(): Connection
method getMetadataFactory (line 160) | public function getMetadataFactory(): ClassMetadataFactory
method getExpressionBuilder (line 165) | public function getExpressionBuilder(): Expr
method beginTransaction (line 170) | public function beginTransaction(): void
method getCache (line 175) | public function getCache(): Cache|null
method wrapInTransaction (line 180) | public function wrapInTransaction(callable $func): mixed
method commit (line 205) | public function commit(): void
method rollback (line 210) | public function rollback(): void
method getClassMetadata (line 222) | public function getClassMetadata(string $className): Mapping\ClassMeta...
method createQuery (line 227) | public function createQuery(string $dql = ''): Query
method createNativeQuery (line 238) | public function createNativeQuery(string $sql, ResultSetMapping $rsm):...
method createQueryBuilder (line 248) | public function createQueryBuilder(): QueryBuilder
method flush (line 265) | public function flush(): void
method find (line 274) | public function find($className, mixed $id, LockMode|int|null $lockMod...
method getReference (line 370) | public function getReference(string $entityName, mixed $id): object|null
method clear (line 415) | public function clear(): void
method close (line 420) | public function close(): void
method persist (line 439) | public function persist(object $object): void
method remove (line 455) | public function remove(object $object): void
method refresh (line 462) | public function refresh(object $object, LockMode|int|null $lockMode = ...
method detach (line 478) | public function detach(object $object): void
method lock (line 483) | public function lock(object $entity, LockMode|int $lockMode, DateTimeI...
method getRepository (line 497) | public function getRepository(string $className): EntityRepository
method contains (line 507) | public function contains(object $object): bool
method getEventManager (line 514) | public function getEventManager(): EventManager
method getConfiguration (line 519) | public function getConfiguration(): Configuration
method errorIfClosed (line 529) | private function errorIfClosed(): void
method isOpen (line 536) | public function isOpen(): bool
method getUnitOfWork (line 541) | public function getUnitOfWork(): UnitOfWork
method newHydrator (line 546) | public function newHydrator(string|int $hydrationMode): AbstractHydrator
method getProxyFactory (line 559) | public function getProxyFactory(): ProxyFactory
method initializeObject (line 564) | public function initializeObject(object $obj): void
method isUninitializedObject (line 572) | public function isUninitializedObject($value): bool
method getFilters (line 577) | public function getFilters(): FilterCollection
method isFiltersStateClean (line 582) | public function isFiltersStateClean(): bool
method hasFilters (line 587) | public function hasFilters(): bool
method checkLockRequirements (line 598) | private function checkLockRequirements(LockMode|int $lockMode, ClassMe...
method configureMetadataCache (line 615) | private function configureMetadataCache(): void
method createCustomHydrator (line 625) | private function createCustomHydrator(string $hydrationMode): Abstract...
FILE: src/EntityManagerInterface.php
type EntityManagerInterface (line 20) | interface EntityManagerInterface extends ObjectManager
method getRepository (line 31) | public function getRepository(string $className): EntityRepository;
method getCache (line 36) | public function getCache(): Cache|null;
method getConnection (line 41) | public function getConnection(): Connection;
method getMetadataFactory (line 43) | public function getMetadataFactory(): ClassMetadataFactory;
method getExpressionBuilder (line 57) | public function getExpressionBuilder(): Expr;
method beginTransaction (line 62) | public function beginTransaction(): void;
method wrapInTransaction (line 81) | public function wrapInTransaction(callable $func): mixed;
method commit (line 86) | public function commit(): void;
method rollback (line 91) | public function rollback(): void;
method createQuery (line 98) | public function createQuery(string $dql = ''): Query;
method createNativeQuery (line 103) | public function createNativeQuery(string $sql, ResultSetMapping $rsm):...
method createQueryBuilder (line 108) | public function createQueryBuilder(): QueryBuilder;
method find (line 133) | public function find(string $className, mixed $id, LockMode|int|null $...
method refresh (line 148) | public function refresh(object $object, LockMode|int|null $lockMode = ...
method getReference (line 163) | public function getReference(string $entityName, mixed $id): object|null;
method close (line 170) | public function close(): void;
method lock (line 180) | public function lock(object $entity, LockMode|int $lockMode, DateTimeI...
method getEventManager (line 185) | public function getEventManager(): EventManager;
method getConfiguration (line 190) | public function getConfiguration(): Configuration;
method isOpen (line 195) | public function isOpen(): bool;
method getUnitOfWork (line 200) | public function getUnitOfWork(): UnitOfWork;
method newHydrator (line 209) | public function newHydrator(string|int $hydrationMode): AbstractHydrator;
method getProxyFactory (line 214) | public function getProxyFactory(): ProxyFactory;
method getFilters (line 219) | public function getFilters(): FilterCollection;
method isFiltersStateClean (line 224) | public function isFiltersStateClean(): bool;
method hasFilters (line 229) | public function hasFilters(): bool;
method getClassMetadata (line 240) | public function getClassMetadata(string $className): Mapping\ClassMeta...
FILE: src/EntityNotFoundException.php
class EntityNotFoundException (line 16) | class EntityNotFoundException extends RuntimeException implements ORMExc...
method fromClassNameAndIdentifier (line 23) | public static function fromClassNameAndIdentifier(string $className, a...
method noIdentifierFound (line 39) | public static function noIdentifierFound(string $className): self
FILE: src/EntityRepository.php
class EntityRepository (line 36) | class EntityRepository implements ObjectRepository, Selectable
method __construct (line 43) | public function __construct(
method createQueryBuilder (line 53) | public function createQueryBuilder(string $alias, string|null $indexBy...
method createResultSetMappingBuilder (line 65) | public function createResultSetMappingBuilder(string $alias): ResultSe...
method find (line 84) | public function find(mixed $id, LockMode|int|null $lockMode = null, in...
method findAll (line 94) | public function findAll(): array
method findBy (line 106) | public function findBy(array $criteria, array|null $orderBy = null, in...
method findOneBy (line 121) | public function findOneBy(array $criteria, array|null $orderBy = null)...
method count (line 138) | public function count(array $criteria = []): int
method __call (line 151) | public function __call(string $method, array $arguments): mixed
method getEntityName (line 173) | protected function getEntityName(): string
method getClassName (line 178) | public function getClassName(): string
method getEntityManager (line 183) | protected function getEntityManager(): EntityManagerInterface
method getClassMetadata (line 189) | protected function getClassMetadata(): ClassMetadata
method matching (line 200) | public function matching(Criteria $criteria): AbstractLazyCollection&S...
method resolveMagicCall (line 217) | private function resolveMagicCall(string $method, string $by, array $a...
FILE: src/Event/ListenersInvoker.php
class ListenersInvoker (line 16) | class ListenersInvoker
method __construct (line 29) | public function __construct(EntityManagerInterface $em)
method getSubscribedSystems (line 43) | public function getSubscribedSystems(ClassMetadata $metadata, string $...
method invoke (line 71) | public function invoke(
FILE: src/Event/LoadClassMetadataEventArgs.php
class LoadClassMetadataEventArgs (line 16) | class LoadClassMetadataEventArgs extends BaseLoadClassMetadataEventArgs
method getEntityManager (line 21) | public function getEntityManager(): EntityManagerInterface
FILE: src/Event/OnClassMetadataNotFoundEventArgs.php
class OnClassMetadataNotFoundEventArgs (line 20) | class OnClassMetadataNotFoundEventArgs extends ManagerEventArgs
method __construct (line 25) | public function __construct(
method setFoundMetadata (line 32) | public function setFoundMetadata(ClassMetadata|null $classMetadata): void
method getFoundMetadata (line 37) | public function getFoundMetadata(): ClassMetadata|null
method getClassName (line 45) | public function getClassName(): string
FILE: src/Event/OnClearEventArgs.php
class OnClearEventArgs (line 17) | class OnClearEventArgs extends BaseOnClearEventArgs
FILE: src/Event/OnFlushEventArgs.php
class OnFlushEventArgs (line 17) | class OnFlushEventArgs extends ManagerEventArgs
FILE: src/Event/PostFlushEventArgs.php
class PostFlushEventArgs (line 17) | class PostFlushEventArgs extends ManagerEventArgs
FILE: src/Event/PostLoadEventArgs.php
class PostLoadEventArgs (line 11) | final class PostLoadEventArgs extends LifecycleEventArgs
FILE: src/Event/PostPersistEventArgs.php
class PostPersistEventArgs (line 11) | final class PostPersistEventArgs extends LifecycleEventArgs
FILE: src/Event/PostRemoveEventArgs.php
class PostRemoveEventArgs (line 11) | final class PostRemoveEventArgs extends LifecycleEventArgs
FILE: src/Event/PostUpdateEventArgs.php
class PostUpdateEventArgs (line 11) | final class PostUpdateEventArgs extends LifecycleEventArgs
FILE: src/Event/PreFlushEventArgs.php
class PreFlushEventArgs (line 17) | class PreFlushEventArgs extends ManagerEventArgs
FILE: src/Event/PrePersistEventArgs.php
class PrePersistEventArgs (line 11) | final class PrePersistEventArgs extends LifecycleEventArgs
FILE: src/Event/PreRemoveEventArgs.php
class PreRemoveEventArgs (line 11) | final class PreRemoveEventArgs extends LifecycleEventArgs
FILE: src/Event/PreUpdateEventArgs.php
class PreUpdateEventArgs (line 20) | class PreUpdateEventArgs extends LifecycleEventArgs
method __construct (line 29) | public function __construct(object $entity, EntityManagerInterface $em...
method getEntityChangeSet (line 42) | public function getEntityChangeSet(): array
method hasChangedField (line 50) | public function hasChangedField(string $field): bool
method getOldValue (line 58) | public function getOldValue(string $field): mixed
method getNewValue (line 68) | public function getNewValue(string $field): mixed
method setNewValue (line 78) | public function setNewValue(string $field, mixed $value): void
method assertValidField (line 90) | private function assertValidField(string $field): void
FILE: src/Events.php
class Events (line 12) | final class Events
method __construct (line 17) | private function __construct()
FILE: src/Exception/ConfigurationException.php
type ConfigurationException (line 7) | interface ConfigurationException extends ORMException
FILE: src/Exception/DuplicateFieldException.php
class DuplicateFieldException (line 11) | class DuplicateFieldException extends LogicException implements ORMExcep...
method create (line 13) | public static function create(string $argName, string $columnName): self
FILE: src/Exception/EntityIdentityCollisionException.php
class EntityIdentityCollisionException (line 11) | final class EntityIdentityCollisionException extends Exception implement...
method create (line 13) | public static function create(object $existingEntity, object $newEntit...
FILE: src/Exception/EntityManagerClosed.php
class EntityManagerClosed (line 9) | final class EntityManagerClosed extends RuntimeException implements Mana...
method create (line 11) | public static function create(): self
FILE: src/Exception/EntityMissingAssignedId.php
class EntityMissingAssignedId (line 11) | final class EntityMissingAssignedId extends LogicException implements OR...
method forField (line 13) | public static function forField(object $entity, string $field): self
FILE: src/Exception/InvalidEntityRepository.php
class InvalidEntityRepository (line 10) | final class InvalidEntityRepository extends LogicException implements Co...
method fromClassName (line 12) | public static function fromClassName(string $className): self
FILE: src/Exception/InvalidHydrationMode.php
class InvalidHydrationMode (line 11) | final class InvalidHydrationMode extends LogicException implements Manag...
method fromMode (line 13) | public static function fromMode(string $mode): self
FILE: src/Exception/ManagerException.php
type ManagerException (line 9) | interface ManagerException extends Throwable
FILE: src/Exception/MissingIdentifierField.php
class MissingIdentifierField (line 11) | final class MissingIdentifierField extends LogicException implements Man...
method fromFieldAndClass (line 13) | public static function fromFieldAndClass(string $fieldName, string $cl...
FILE: src/Exception/MissingMappingDriverImplementation.php
class MissingMappingDriverImplementation (line 9) | final class MissingMappingDriverImplementation extends LogicException im...
method create (line 11) | public static function create(): self
FILE: src/Exception/MultipleSelectorsFoundException.php
class MultipleSelectorsFoundException (line 12) | final class MultipleSelectorsFoundException extends LogicException imple...
method create (line 17) | public static function create(array $selectors): self
FILE: src/Exception/NoMatchingPropertyException.php
class NoMatchingPropertyException (line 11) | class NoMatchingPropertyException extends LogicException implements ORME...
method create (line 13) | public static function create(string $property): self
FILE: src/Exception/NotSupported.php
class NotSupported (line 12) | final class NotSupported extends LogicException implements ORMException
method create (line 14) | public static function create(): self
method createForDbal3 (line 19) | public static function createForDbal3(string $context): self
method createForPersistence3 (line 32) | public static function createForPersistence3(string $context): self
FILE: src/Exception/ORMException.php
type ORMException (line 9) | interface ORMException extends Throwable
FILE: src/Exception/PersisterException.php
class PersisterException (line 9) | class PersisterException extends BasePersisterException
FILE: src/Exception/RepositoryException.php
type RepositoryException (line 11) | interface RepositoryException extends ORMException
FILE: src/Exception/SchemaToolException.php
type SchemaToolException (line 9) | interface SchemaToolException extends Throwable
FILE: src/Exception/UnexpectedAssociationValue.php
class UnexpectedAssociationValue (line 11) | final class UnexpectedAssociationValue extends CacheException
method create (line 13) | public static function create(
FILE: src/Exception/UnrecognizedIdentifierFields.php
class UnrecognizedIdentifierFields (line 12) | final class UnrecognizedIdentifierFields extends LogicException implemen...
method fromClassAndFieldNames (line 15) | public static function fromClassAndFieldNames(string $className, array...
FILE: src/Id/AbstractIdGenerator.php
class AbstractIdGenerator (line 9) | abstract class AbstractIdGenerator
method generateId (line 14) | abstract public function generateId(EntityManagerInterface $em, object...
method isPostInsertGenerator (line 24) | public function isPostInsertGenerator(): bool
FILE: src/Id/AssignedGenerator.php
class AssignedGenerator (line 13) | class AssignedGenerator extends AbstractIdGenerator
method generateId (line 22) | public function generateId(EntityManagerInterface $em, object|null $en...
FILE: src/Id/BigIntegerIdentityGenerator.php
class BigIntegerIdentityGenerator (line 14) | class BigIntegerIdentityGenerator extends AbstractIdGenerator
method generateId (line 16) | public function generateId(EntityManagerInterface $em, object|null $en...
method isPostInsertGenerator (line 21) | public function isPostInsertGenerator(): bool
FILE: src/Id/IdentityGenerator.php
class IdentityGenerator (line 14) | class IdentityGenerator extends AbstractIdGenerator
method generateId (line 16) | public function generateId(EntityManagerInterface $em, object|null $en...
method isPostInsertGenerator (line 21) | public function isPostInsertGenerator(): bool
FILE: src/Id/SequenceGenerator.php
class SequenceGenerator (line 18) | class SequenceGenerator extends AbstractIdGenerator implements Serializable
method __construct (line 29) | public function __construct(
method generateId (line 35) | public function generateId(EntityManagerInterface $em, object|null $en...
method getCurrentMaxValue (line 56) | public function getCurrentMaxValue(): int|null
method getNextValue (line 64) | public function getNextValue(): int
method serialize (line 70) | final public function serialize(): string
method __serialize (line 84) | public function __serialize(): array
method unserialize (line 93) | final public function unserialize(string $serialized): void
method __unserialize (line 107) | public function __unserialize(array $data): void
FILE: src/Internal/Hydration/AbstractHydrator.php
class AbstractHydrator (line 40) | abstract class AbstractHydrator
method __construct (line 86) | public function __construct(protected EntityManagerInterface $em)
method toIterable (line 101) | final public function toIterable(Result $stmt, ResultSetMapping $resul...
method statement (line 143) | final protected function statement(): Result
method resultSetMapping (line 152) | final protected function resultSetMapping(): ResultSetMapping
method hydrateAll (line 166) | public function hydrateAll(Result $stmt, ResultSetMapping $resultSetMa...
method onClear (line 188) | public function onClear(mixed $eventArgs): void
method prepare (line 196) | protected function prepare(): void
method cleanup (line 204) | protected function cleanup(): void
method cleanupAfterRowIteration (line 219) | protected function cleanupAfterRowIteration(): void
method hydrateRowData (line 233) | protected function hydrateRowData(array $row, array &$result): void
method hydrateAllData (line 241) | abstract protected function hydrateAllData(): mixed;
method gatherRowData (line 270) | protected function gatherRowData(array $data, array &$id, array &$none...
method hydrateNestedEntity (line 391) | protected function hydrateNestedEntity(array $data, string $dqlAlias):...
method gatherScalarRowData (line 410) | protected function gatherScalarRowData(array &$data): array
method hydrateColumnInfo (line 445) | protected function hydrateColumnInfo(string $key): array|null
method getDiscriminatorValues (line 541) | private function getDiscriminatorValues(ClassMetadata $classMetadata):...
method getClassMetadata (line 556) | protected function getClassMetadata(string $className): ClassMetadata
method registerManaged (line 572) | protected function registerManaged(ClassMetadata $class, object $entit...
method buildEnum (line 599) | final protected function buildEnum(mixed $value, string $enumType): Ba...
FILE: src/Internal/Hydration/ArrayHydrator.php
class ArrayHydrator (line 17) | class ArrayHydrator extends AbstractHydrator
method prepare (line 35) | protected function prepare(): void
method hydrateAllData (line 49) | protected function hydrateAllData(): array
method hydrateRowData (line 63) | protected function hydrateRowData(array $row, array &$result): void
method updateResultPointer (line 239) | private function updateResultPointer(
FILE: src/Internal/Hydration/HydrationException.php
class HydrationException (line 13) | class HydrationException extends Exception implements ORMException
method nonUniqueResult (line 15) | public static function nonUniqueResult(): self
method parentObjectOfRelationNotFound (line 20) | public static function parentObjectOfRelationNotFound(string $alias, s...
method emptyDiscriminatorValue (line 30) | public static function emptyDiscriminatorValue(string $dqlAlias): self
method missingDiscriminatorColumn (line 38) | public static function missingDiscriminatorColumn(string $entityName, ...
method missingDiscriminatorMetaMappingColumn (line 48) | public static function missingDiscriminatorMetaMappingColumn(string $e...
method invalidDiscriminatorValue (line 59) | public static function invalidDiscriminatorValue(string $discrValue, a...
method partialObjectHydrationDisallowed (line 68) | public static function partialObjectHydrationDisallowed(): self
FILE: src/Internal/Hydration/ObjectHydrator.php
class ObjectHydrator (line 29) | class ObjectHydrator extends AbstractHydrator
method prepare (line 54) | protected function prepare(): void
method cleanup (line 111) | protected function cleanup(): void
method cleanupAfterRowIteration (line 130) | protected function cleanupAfterRowIteration(): void
method hydrateAllData (line 142) | protected function hydrateAllData(): array
method initRelatedCollection (line 170) | private function initRelatedCollection(
method getEntity (line 224) | private function getEntity(array $data, string $dqlAlias): object
method getEntityFromIdentityMap (line 275) | private function getEntityFromIdentityMap(string $className, array $da...
method hydrateRowData (line 321) | protected function hydrateRowData(array $row, array &$result): void
method hydrateNestedEntity (line 577) | protected function hydrateNestedEntity(array $data, string $dqlAlias):...
method onClear (line 590) | public function onClear(mixed $eventArgs): void
FILE: src/Internal/Hydration/ScalarColumnHydrator.php
class ScalarColumnHydrator (line 15) | final class ScalarColumnHydrator extends AbstractHydrator
method hydrateAllData (line 23) | protected function hydrateAllData(): array
FILE: src/Internal/Hydration/ScalarHydrator.php
class ScalarHydrator (line 12) | class ScalarHydrator extends AbstractHydrator
method hydrateAllData (line 17) | protected function hydrateAllData(): array
method hydrateRowData (line 31) | protected function hydrateRowData(array $row, array &$result): void
FILE: src/Internal/Hydration/SimpleObjectHydrator.php
class SimpleObjectHydrator (line 25) | class SimpleObjectHydrator extends AbstractHydrator
method prepare (line 31) | protected function prepare(): void
method cleanup (line 44) | protected function cleanup(): void
method hydrateAllData (line 55) | protected function hydrateAllData(): array
method hydrateRowData (line 71) | protected function hydrateRowData(array $row, array &$result): void
FILE: src/Internal/Hydration/SingleScalarHydrator.php
class SingleScalarHydrator (line 17) | class SingleScalarHydrator extends AbstractHydrator
method hydrateAllData (line 19) | protected function hydrateAllData(): mixed
FILE: src/Internal/HydrationCompleteHandler.php
class HydrationCompleteHandler (line 17) | final class HydrationCompleteHandler
method __construct (line 22) | public function __construct(
method deferPostLoadInvoking (line 31) | public function deferPostLoadInvoking(ClassMetadata $class, object $en...
method hydrationComplete (line 47) | public function hydrationComplete(): void
FILE: src/Internal/NoUnknownNamedArguments.php
type NoUnknownNamedArguments (line 26) | trait NoUnknownNamedArguments
method validateVariadicParameter (line 34) | private static function validateVariadicParameter(array $parameter): void
FILE: src/Internal/SQLResultCasing.php
type SQLResultCasing (line 16) | trait SQLResultCasing
method getSQLResultCasing (line 18) | private function getSQLResultCasing(AbstractPlatform $platform, string...
FILE: src/Internal/StronglyConnectedComponents.php
class StronglyConnectedComponents (line 26) | final class StronglyConnectedComponents
method addNode (line 85) | public function addNode(object $node): void
method hasNode (line 93) | public function hasNode(object $node): bool
method addEdge (line 101) | public function addEdge(object $from, object $to): void
method findStronglyConnectedComponents (line 109) | public function findStronglyConnectedComponents(): void
method tarjan (line 118) | private function tarjan(int $oid): void
method getNodeRepresentingStronglyConnectedComponent (line 149) | public function getNodeRepresentingStronglyConnectedComponent(object $...
FILE: src/Internal/TopologicalSort.php
class TopologicalSort (line 21) | final class TopologicalSort
method addNode (line 58) | public function addNode(object $node): void
method hasNode (line 66) | public function hasNode(object $node): bool
method addEdge (line 76) | public function addEdge(object $from, object $to, bool $optional): void
method sort (line 95) | public function sort(): array
method visit (line 106) | private function visit(int $oid): void
FILE: src/Internal/TopologicalSort/CycleDetectedException.php
class CycleDetectedException (line 11) | class CycleDetectedException extends RuntimeException
method __construct (line 21) | public function __construct(private readonly object $startNode)
method getCycle (line 29) | public function getCycle(): array
method addToCycle (line 34) | public function addToCycle(object $node): void
method isCycleCollected (line 43) | public function isCycleCollected(): bool
FILE: src/Internal/UnitOfWork/InsertBatch.php
class InsertBatch (line 25) | final class InsertBatch
method __construct (line 31) | public function __construct(
method batchByEntityType (line 52) | public static function batchByEntityType(
FILE: src/LazyCriteriaCollection.php
class LazyCriteriaCollection (line 27) | class LazyCriteriaCollection extends AbstractLazyCollection implements S...
method __construct (line 31) | public function __construct(
method count (line 40) | public function count(): int
method isEmpty (line 57) | public function isEmpty(): bool
method contains (line 73) | public function contains(mixed $element): bool
method matching (line 83) | public function matching(Criteria $criteria): ReadableCollection&Selec...
method doInitialize (line 91) | protected function doInitialize(): void
FILE: src/Mapping/AnsiQuoteStrategy.php
class AnsiQuoteStrategy (line 14) | class AnsiQuoteStrategy implements QuoteStrategy
method getColumnName (line 18) | public function getColumnName(
method getTableName (line 26) | public function getTableName(ClassMetadata $class, AbstractPlatform $p...
method getSequenceName (line 34) | public function getSequenceName(array $definition, ClassMetadata $clas...
method getJoinColumnName (line 39) | public function getJoinColumnName(JoinColumnMapping $joinColumn, Class...
method getReferencedJoinColumnName (line 44) | public function getReferencedJoinColumnName(
method getJoinTableName (line 52) | public function getJoinTableName(
method getIdentifierColumnNames (line 63) | public function getIdentifierColumnNames(ClassMetadata $class, Abstrac...
method getColumnAlias (line 68) | public function getColumnAlias(
FILE: src/Mapping/ArrayAccessImplementation.php
type ArrayAccessImplementation (line 13) | trait ArrayAccessImplementation
method offsetExists (line 16) | public function offsetExists(mixed $offset): bool
method offsetGet (line 29) | public function offsetGet(mixed $offset): mixed
method offsetSet (line 46) | public function offsetSet(mixed $offset, mixed $value): void
method offsetUnset (line 59) | public function offsetUnset(mixed $offset): void
FILE: src/Mapping/AssociationMapping.php
class AssociationMapping (line 18) | abstract class AssociationMapping implements ArrayAccess
method __construct (line 91) | final public function __construct(
method fromMappingArray (line 120) | public static function fromMappingArray(array $mappingArray): static
method isOwningSide (line 165) | final public function isOwningSide(): bool
method isToOne (line 171) | final public function isToOne(): bool
method isToMany (line 177) | final public function isToMany(): bool
method isOneToOneOwningSide (line 183) | final public function isOneToOneOwningSide(): bool
method isToOneOwningSide (line 189) | final public function isToOneOwningSide(): bool
method isManyToManyOwningSide (line 195) | final public function isManyToManyOwningSide(): bool
method isOneToOne (line 201) | final public function isOneToOne(): bool
method isOneToMany (line 207) | final public function isOneToMany(): bool
method isManyToOne (line 213) | final public function isManyToOne(): bool
method isManyToMany (line 219) | final public function isManyToMany(): bool
method isOrdered (line 225) | final public function isOrdered(): bool
method isIndexed (line 231) | public function isIndexed(): bool
method type (line 236) | final public function type(): int
method offsetExists (line 248) | public function offsetExists(mixed $offset): bool
method offsetGet (line 253) | final public function offsetGet(mixed $offset): mixed
method offsetSet (line 270) | public function offsetSet(mixed $offset, mixed $value): void
method offsetUnset (line 289) | public function offsetUnset(mixed $offset): void
method isCascadeRemove (line 302) | final public function isCascadeRemove(): bool
method isCascadePersist (line 307) | final public function isCascadePersist(): bool
method isCascadeRefresh (line 312) | final public function isCascadeRefresh(): bool
method isCascadeDetach (line 317) | final public function isCascadeDetach(): bool
method toArray (line 323) | public function toArray(): array
method __sleep (line 334) | public function __sleep(): array
FILE: src/Mapping/AssociationOverride.php
class AssociationOverride (line 8) | final class AssociationOverride implements MappingAttribute
method __construct (line 32) | public function __construct(
FILE: src/Mapping/AssociationOverrides.php
class AssociationOverrides (line 13) | #[Attribute(Attribute::TARGET_CLASS)]
method __construct (line 24) | public function __construct(array|AssociationOverride $overrides)
FILE: src/Mapping/AttributeOverride.php
class AttributeOverride (line 8) | final class AttributeOverride implements MappingAttribute
method __construct (line 10) | public function __construct(
FILE: src/Mapping/AttributeOverrides.php
class AttributeOverrides (line 13) | #[Attribute(Attribute::TARGET_CLASS)]
method __construct (line 24) | public function __construct(array|AttributeOverride $overrides)
FILE: src/Mapping/Builder/AssociationBuilder.php
class AssociationBuilder (line 10) | class AssociationBuilder
method __construct (line 16) | public function __construct(
method mappedBy (line 24) | public function mappedBy(string $fieldName): static
method inversedBy (line 32) | public function inversedBy(string $fieldName): static
method cascadeAll (line 40) | public function cascadeAll(): static
method cascadePersist (line 48) | public function cascadePersist(): static
method cascadeRemove (line 56) | public function cascadeRemove(): static
method cascadeDetach (line 64) | public function cascadeDetach(): static
method cascadeRefresh (line 72) | public function cascadeRefresh(): static
method fetchExtraLazy (line 80) | public function fetchExtraLazy(): static
method fetchEager (line 88) | public function fetchEager(): static
method fetchLazy (line 96) | public function fetchLazy(): static
method addJoinColumn (line 108) | public function addJoinColumn(
method makePrimaryKey (line 137) | public function makePrimaryKey(): static
method orphanRemoval (line 152) | public function orphanRemoval(): static
method build (line 160) | public function build(): ClassMetadataBuilder
FILE: src/Mapping/Builder/ClassMetadataBuilder.php
class ClassMetadataBuilder (line 15) | class ClassMetadataBuilder
method __construct (line 17) | public function __construct(
method getClassMetadata (line 22) | public function getClassMetadata(): ClassMetadata
method setMappedSuperClass (line 32) | public function setMappedSuperClass(): static
method setEmbeddable (line 45) | public function setEmbeddable(): static
method addEmbedded (line 60) | public function addEmbedded(string $fieldName, string $class, string|f...
method setCustomRepositoryClass (line 78) | public function setCustomRepositoryClass(string $repositoryClassName):...
method setReadOnly (line 90) | public function setReadOnly(): static
method setTable (line 102) | public function setTable(string $name): static
method addIndex (line 116) | public function addIndex(array $columns, string $name): static
method addUniqueConstraint (line 134) | public function addUniqueConstraint(array $columns, string $name): static
method setJoinedTableInheritance (line 150) | public function setJoinedTableInheritance(): static
method setSingleTableInheritance (line 162) | public function setSingleTableInheritance(): static
method setDiscriminatorColumn (line 177) | public function setDiscriminatorColumn(
method addDiscriminatorMapClass (line 204) | public function addDiscriminatorMapClass(string $name, string $class):...
method setChangeTrackingPolicyDeferredExplicit (line 216) | public function setChangeTrackingPolicyDeferredExplicit(): static
method addLifecycleEvent (line 228) | public function addLifecycleEvent(string $methodName, string $event): ...
method addField (line 242) | public function addField(string $name, string $type, array $mapping = ...
method createField (line 255) | public function createField(string $name, string $type): FieldBuilder
method createEmbedded (line 269) | public function createEmbedded(string $fieldName, string $class): Embe...
method addManyToOne (line 284) | public function addManyToOne(
method createManyToOne (line 303) | public function createManyToOne(string $name, string $targetEntity): A...
method createOneToOne (line 318) | public function createOneToOne(string $name, string $targetEntity): As...
method addInverseOneToOne (line 333) | public function addInverseOneToOne(string $name, string $targetEntity,...
method addOwningOneToOne (line 344) | public function addOwningOneToOne(
method createManyToMany (line 361) | public function createManyToMany(string $name, string $targetEntity): ...
method addOwningManyToMany (line 376) | public function addOwningManyToMany(
method addInverseManyToMany (line 393) | public function addInverseManyToMany(string $name, string $targetEntit...
method createOneToMany (line 404) | public function createOneToMany(string $name, string $targetEntity): O...
method addOneToMany (line 419) | public function addOneToMany(string $name, string $targetEntity, strin...
FILE: src/Mapping/Builder/EmbeddedBuilder.php
class EmbeddedBuilder (line 12) | class EmbeddedBuilder
method __construct (line 15) | public function __construct(
method setColumnPrefix (line 26) | public function setColumnPrefix(string $columnPrefix): static
method build (line 38) | public function build(): ClassMetadataBuilder
FILE: src/Mapping/Builder/EntityListenerBuilder.php
class EntityListenerBuilder (line 17) | class EntityListenerBuilder
method bindEntityListener (line 39) | public static function bindEntityListener(ClassMetadata $metadata, str...
FILE: src/Mapping/Builder/FieldBuilder.php
class FieldBuilder (line 14) | class FieldBuilder
method __construct (line 25) | public function __construct(
method length (line 36) | public function length(int $length): static
method nullable (line 48) | public function nullable(bool $flag = true): static
method unique (line 60) | public function unique(bool $flag = true): static
method index (line 72) | public function index(bool $flag = true): static
method columnName (line 84) | public function columnName(string $name): static
method precision (line 96) | public function precision(int $p): static
method insertable (line 108) | public function insertable(bool $flag = true): self
method updatable (line 122) | public function updatable(bool $flag = true): self
method scale (line 136) | public function scale(int $s): static
method makePrimaryKey (line 148) | public function makePrimaryKey(): static
method option (line 160) | public function option(string $name, mixed $value): static
method generatedValue (line 168) | public function generatedValue(string $strategy = 'AUTO'): static
method isVersionField (line 180) | public function isVersionField(): static
method setSequenceGenerator (line 192) | public function setSequenceGenerator(string $sequenceName, int $alloca...
method columnDefinition (line 208) | public function columnDefinition(string $def): static
method setCustomIdGenerator (line 221) | public function setCustomIdGenerator(string $customIdGenerator): static
method build (line 233) | public function build(): ClassMetadataBuilder
FILE: src/Mapping/Builder/ManyToManyAssociationBuilder.php
class ManyToManyAssociationBuilder (line 12) | class ManyToManyAssociationBuilder extends OneToManyAssociationBuilder
method setJoinTable (line 20) | public function setJoinTable(string $name): static
method addJoinColumn (line 32) | public function addJoinColumn(
method addInverseJoinColumn (line 56) | public function addInverseJoinColumn(
method build (line 75) | public function build(): ClassMetadataBuilder
FILE: src/Mapping/Builder/OneToManyAssociationBuilder.php
class OneToManyAssociationBuilder (line 12) | class OneToManyAssociationBuilder extends AssociationBuilder
method setOrderBy (line 19) | public function setOrderBy(array $fieldNames): static
method setIndexBy (line 27) | public function setIndexBy(string $fieldName): static
method build (line 34) | public function build(): ClassMetadataBuilder
FILE: src/Mapping/Cache.php
class Cache (line 10) | #[Attribute(Attribute::TARGET_CLASS | Attribute::TARGET_PROPERTY)]
method __construct (line 14) | public function __construct(
FILE: src/Mapping/ChainTypedFieldMapper.php
class ChainTypedFieldMapper (line 10) | final class ChainTypedFieldMapper implements TypedFieldMapper
method __construct (line 17) | public function __construct(TypedFieldMapper ...$typedFieldMappers)
method validateAndComplete (line 27) | public function validateAndComplete(array $mapping, ReflectionProperty...
FILE: src/Mapping/ChangeTrackingPolicy.php
class ChangeTrackingPolicy (line 9) | #[Attribute(Attribute::TARGET_CLASS)]
method __construct (line 13) | public function __construct(
FILE: src/Mapping/ClassMetadata.php
class ClassMetadata (line 81) | class ClassMetadata implements PersistenceClassMetadata, Stringable
method __construct (line 563) | public function __construct(public string $name, NamingStrategy|null $...
method getReflectionProperties (line 579) | public function getReflectionProperties(): array|LegacyReflectionFields
method getPropertyAccessors (line 589) | public function getPropertyAccessors(): array
method getReflectionProperty (line 599) | public function getReflectionProperty(string $name): ReflectionPropert...
method getPropertyAccessor (line 604) | public function getPropertyAccessor(string $name): PropertyAccessor|null
method getSingleIdReflectionProperty (line 614) | public function getSingleIdReflectionProperty(): ReflectionProperty|null
method getSingleIdPropertyAccessor (line 624) | public function getSingleIdPropertyAccessor(): PropertyAccessor|null
method getIdentifierValues (line 641) | public function getIdentifierValues(object $entity): array
method setIdentifierValues (line 674) | public function setIdentifierValues(object $entity, array $id): void
method setFieldValue (line 684) | public function setFieldValue(object $entity, string $field, mixed $va...
method getFieldValue (line 692) | public function getFieldValue(object $entity, string $field): mixed
method __toString (line 704) | public function __toString(): string
method __sleep (line 722) | public function __sleep(): array
method newInstance (line 816) | public function newInstance(): object
method wakeupReflection (line 824) | public function wakeupReflection(ReflectionService $reflService): void
method initializeReflection (line 906) | public function initializeReflection(ReflectionService $reflService): ...
method validateIdentifier (line 923) | public function validateIdentifier(): void
method validateAssociations (line 944) | public function validateAssociations(): void
method validateLifecycleCallbacks (line 962) | public function validateLifecycleCallbacks(ReflectionService $reflServ...
method enableCache (line 974) | public function enableCache(array $cache): void
method enableAssociationCache (line 988) | public function enableAssociationCache(string $fieldName, array $cache...
method getAssociationCacheDefaults (line 999) | public function getAssociationCacheDefaults(string $fieldName, array $...
method setChangeTrackingPolicy (line 1015) | public function setChangeTrackingPolicy(int $policy): void
method isChangeTrackingDeferredExplicit (line 1023) | public function isChangeTrackingDeferredExplicit(): bool
method isChangeTrackingDeferredImplicit (line 1031) | public function isChangeTrackingDeferredImplicit(): bool
method isIdentifier (line 1039) | public function isIdentifier(string $fieldName): bool
method isUniqueField (line 1052) | public function isUniqueField(string $fieldName): bool
method isNullable (line 1059) | public function isNullable(string $fieldName): bool
method isIndexed (line 1066) | public function isIndexed(string $fieldName): bool
method getColumnName (line 1078) | public function getColumnName(string $fieldName): string
method getFieldMapping (line 1090) | public function getFieldMapping(string $fieldName): FieldMapping
method getAssociationMapping (line 1109) | public function getAssociationMapping(string $fieldName): AssociationM...
method getAssociationMappings (line 1123) | public function getAssociationMappings(): array
method getFieldName (line 1134) | public function getFieldName(string $columnName): string
method isTypedProperty (line 1142) | private function isTypedProperty(string $name): bool
method validateAndCompleteTypedFieldMapping (line 1156) | private function validateAndCompleteTypedFieldMapping(array $mapping):...
method validateAndCompleteTypedAssociationMapping (line 1170) | private function validateAndCompleteTypedAssociationMapping(array $map...
method validateAndCompleteFieldMapping (line 1200) | protected function validateAndCompleteFieldMapping(array $mapping): Fi...
method _validateAndCompleteAssociationMapping (line 1294) | protected function _validateAndCompleteAssociationMapping(array $mappi...
method getIdentifierFieldNames (line 1463) | public function getIdentifierFieldNames(): array
method getSingleIdentifierFieldName (line 1474) | public function getSingleIdentifierFieldName(): string
method getSingleIdentifierColumnName (line 1493) | public function getSingleIdentifierColumnName(): string
method setIdentifier (line 1505) | public function setIdentifier(array $identifier): void
method getIdentifier (line 1514) | public function getIdentifier(): array
method hasField (line 1519) | public function hasField(string $fieldName): bool
method getColumnNames (line 1532) | public function getColumnNames(array|null $fieldNames = null): array
method getIdentifierColumnNames (line 1546) | public function getIdentifierColumnNames(): array
method setIdGeneratorType (line 1573) | public function setIdGeneratorType(int $generatorType): void
method usesIdGenerator (line 1581) | public function usesIdGenerator(): bool
method isInheritanceTypeNone (line 1586) | public function isInheritanceTypeNone(): bool
method isInheritanceTypeJoined (line 1597) | public function isInheritanceTypeJoined(): bool
method isInheritanceTypeSingleTable (line 1608) | public function isInheritanceTypeSingleTable(): bool
method isIdGeneratorIdentity (line 1616) | public function isIdGeneratorIdentity(): bool
method isIdGeneratorSequence (line 1626) | public function isIdGeneratorSequence(): bool
method isIdentifierNatural (line 1635) | public function isIdentifierNatural(): bool
method getTypeOfField (line 1645) | public function getTypeOfField(string $fieldName): string|null
method getTableName (line 1655) | public function getTableName(): string
method getSchemaName (line 1663) | public function getSchemaName(): string|null
method getTemporaryIdTableName (line 1671) | public function getTemporaryIdTableName(): string
method setSubclasses (line 1682) | public function setSubclasses(array $subclasses): void
method setParentClasses (line 1697) | public function setParentClasses(array $classNames): void
method setInheritanceType (line 1713) | public function setInheritanceType(int $type): void
method setAssociationOverride (line 1729) | public function setAssociationOverride(string $fieldName, array $overr...
method setAttributeOverride (line 1787) | public function setAttributeOverride(string $fieldName, array $overrid...
method isInheritedField (line 1832) | public function isInheritedField(string $fieldName): bool
method isRootEntity (line 1840) | public function isRootEntity(): bool
method isInheritedAssociation (line 1848) | public function isInheritedAssociation(string $fieldName): bool
method isInheritedEmbeddedClass (line 1853) | public function isInheritedEmbeddedClass(string $fieldName): bool
method setTableName (line 1863) | public function setTableName(string $tableName): void
method setPrimaryTable (line 1880) | public function setPrimaryTable(array $table): void
method isInheritanceType (line 1920) | private function isInheritanceType(int $type): bool
method mapField (line 1934) | public function mapField(array $mapping): void
method addInheritedAssociationMapping (line 1955) | public function addInheritedAssociationMapping(AssociationMapping $map...
method addInheritedFieldMapping (line 1969) | public function addInheritedFieldMapping(FieldMapping $fieldMapping): ...
method mapOneToOne (line 1986) | public function mapOneToOne(array $mapping): void
method mapOneToMany (line 2000) | public function mapOneToMany(array $mapping): void
method mapManyToOne (line 2014) | public function mapManyToOne(array $mapping): void
method mapManyToMany (line 2028) | public function mapManyToMany(array $mapping): void
method _storeAssociationMapping (line 2044) | protected function _storeAssociationMapping(AssociationMapping $assocM...
method setCustomRepositoryClass (line 2059) | public function setCustomRepositoryClass(string|null $repositoryClassN...
method invokeLifecycleCallbacks (line 2078) | public function invokeLifecycleCallbacks(string $lifecycleEvent, objec...
method hasLifecycleCallbacks (line 2088) | public function hasLifecycleCallbacks(string $lifecycleEvent): bool
method getLifecycleCallbacks (line 2099) | public function getLifecycleCallbacks(string $event): array
method addLifecycleCallback (line 2107) | public function addLifecycleCallback(string $callback, string $event):...
method setLifecycleCallbacks (line 2126) | public function setLifecycleCallbacks(array $callbacks): void
method addEntityListener (line 2140) | public function addEntityListener(string $eventName, string $class, st...
method setDiscriminatorColumn (line 2182) | public function setDiscriminatorColumn(DiscriminatorColumnMapping|arra...
method getDiscriminatorColumn (line 2225) | final public function getDiscriminatorColumn(): DiscriminatorColumnMap...
method setDiscriminatorMap (line 2242) | public function setDiscriminatorMap(array $map): void
method addDiscriminatorMapClass (line 2280) | public function addDiscriminatorMapClass(int|string $name, string $cla...
method addSubClasses (line 2301) | public function addSubClasses(array $classes): void
method addSubClass (line 2308) | public function addSubClass(string $className): void
method hasAssociation (line 2318) | public function hasAssociation(string $fieldName): bool
method isSingleValuedAssociation (line 2323) | public function isSingleValuedAssociation(string $fieldName): bool
method isCollectionValuedAssociation (line 2329) | public function isCollectionValuedAssociation(string $fieldName): bool
method isAssociationWithSingleJoinColumn (line 2338) | public function isAssociationWithSingleJoinColumn(string $fieldName): ...
method getSingleAssociationJoinColumnName (line 2350) | public function getSingleAssociationJoinColumnName(string $fieldName):...
method getSingleAssociationReferencedJoinColumnName (line 2368) | public function getSingleAssociationReferencedJoinColumnName(string $f...
method getFieldForColumn (line 2388) | public function getFieldForColumn(string $columnName): string
method setIdGenerator (line 2410) | public function setIdGenerator(AbstractIdGenerator $generator): void
method setCustomGeneratorDefinition (line 2420) | public function setCustomGeneratorDefinition(array $definition): void
method setSequenceGeneratorDefinition (line 2442) | public function setSequenceGeneratorDefinition(array $definition): void
method setVersionMapping (line 2475) | public function setVersionMapping(array &$mapping): void
method setVersioned (line 2495) | public function setVersioned(bool $bool): void
method setVersionField (line 2508) | public function setVersionField(string|null $versionField): void
method markReadOnly (line 2516) | public function markReadOnly(): void
method getFieldNames (line 2524) | public function getFieldNames(): array
method getAssociationNames (line 2532) | public function getAssociationNames(): array
method getAssociationTargetClass (line 2544) | public function getAssociationTargetClass(string $assocName): string
method getName (line 2550) | public function getName(): string
method isAssociationInverseSide (line 2555) | public function isAssociationInverseSide(string $assocName): bool
method getAssociationMappedByTargetField (line 2561) | public function getAssociationMappedByTargetField(string $assocName): ...
method fullyQualifiedClassName (line 2589) | public function fullyQualifiedClassName(string|null $className): strin...
method getMetadataValue (line 2609) | public function getMetadataValue(string $name): mixed
method mapEmbedded (line 2627) | public function mapEmbedded(array $mapping): void
method inlineEmbeddable (line 2653) | public function inlineEmbeddable(string $property, ClassMetadata $embe...
method assertFieldNotMapped (line 2683) | private function assertFieldNotMapped(string $fieldName): void
method getSequenceName (line 2699) | public function getSequenceName(AbstractPlatform $platform): string
method getSequencePrefix (line 2712) | public function getSequencePrefix(AbstractPlatform $platform): string
FILE: src/Mapping/ClassMetadataFactory.php
class ClassMetadataFactory (line 53) | class ClassMetadataFactory extends AbstractClassMetadataFactory
method setEntityManager (line 67) | public function setEntityManager(EntityManagerInterface $em): void
method getOwningSide (line 88) | final public function getOwningSide(AssociationMapping $maybeOwningSid...
method initialize (line 110) | protected function initialize(): void
method onNotFoundMetadata (line 117) | protected function onNotFoundMetadata(string $className): ClassMetadat...
method doLoadMetadata (line 135) | protected function doLoadMetadata(
method validateRuntimeMetadata (line 263) | protected function validateRuntimeMetadata(ClassMetadata $class, Class...
method newClassMetadataInstance (line 305) | protected function newClassMetadataInstance(string $className): ClassM...
method addDefaultDiscriminatorMap (line 326) | private function addDefaultDiscriminatorMap(ClassMetadata $class): void
method findAbstractEntityClassesNotListedInDiscriminatorMap (line 352) | private function findAbstractEntityClassesNotListedInDiscriminatorMap(...
method peekIfIsMappedSuperclass (line 392) | private function peekIfIsMappedSuperclass(string $className): bool
method getShortName (line 408) | private function getShortName(string $className): string
method addMappingInheritanceInformation (line 423) | private function addMappingInheritanceInformation(
method addInheritedFields (line 439) | private function addInheritedFields(ClassMetadata $subClass, ClassMeta...
method addInheritedRelations (line 457) | private function addInheritedRelations(ClassMetadata $subClass, ClassM...
method addInheritedEmbeddedClasses (line 476) | private function addInheritedEmbeddedClasses(ClassMetadata $subClass, ...
method addNestedEmbeddedClasses (line 492) | private function addNestedEmbeddedClasses(
method addInheritedIndexes (line 521) | private function addInheritedIndexes(ClassMetadata $subClass, ClassMet...
method completeIdGeneratorMapping (line 546) | private function completeIdGeneratorMapping(ClassMetadata $class): void
method determineIdGeneratorStrategy (line 620) | private function determineIdGeneratorStrategy(AbstractPlatform $platfo...
method truncateSequenceName (line 669) | private function truncateSequenceName(string $schemaElementName): string
method inheritIdGeneratorMapping (line 688) | private function inheritIdGeneratorMapping(ClassMetadata $class, Class...
method wakeupReflection (line 703) | protected function wakeupReflection(ClassMetadataInterface $class, Ref...
method initializeReflection (line 720) | protected function initializeReflection(ClassMetadataInterface $class,...
method getDriver (line 725) | protected function getDriver(): MappingDriver
method isEntity (line 732) | protected function isEntity(ClassMetadataInterface $class): bool
method getTargetPlatform (line 737) | private function getTargetPlatform(): Platforms\AbstractPlatform
FILE: src/Mapping/Column.php
class Column (line 10) | #[Attribute(Attribute::TARGET_PROPERTY)]
method __construct (line 20) | public function __construct(
FILE: src/Mapping/CustomIdGenerator.php
class CustomIdGenerator (line 9) | #[Attribute(Attribute::TARGET_PROPERTY)]
method __construct (line 12) | public function __construct(
FILE: src/Mapping/DefaultEntityListenerResolver.php
class DefaultEntityListenerResolver (line 12) | class DefaultEntityListenerResolver implements EntityListenerResolver
method clear (line 17) | public function clear(string|null $className = null): void
method register (line 29) | public function register(object $object): void
method resolve (line 34) | public function resolve(string $className): object
FILE: src/Mapping/DefaultNamingStrategy.php
class DefaultNamingStrategy (line 17) | class DefaultNamingStrategy implements NamingStrategy
method classToTableName (line 19) | public function classToTableName(string $className): string
method propertyToColumnName (line 28) | public function propertyToColumnName(string $propertyName, string $cla...
method embeddedFieldToColumnName (line 33) | public function embeddedFieldToColumnName(
method referenceColumnName (line 42) | public function referenceColumnName(): string
method joinColumnName (line 47) | public function joinColumnName(string $propertyName, string $className...
method joinTableName (line 52) | public function joinTableName(
method joinKeyColumnName (line 61) | public function joinKeyColumnName(
FILE: src/Mapping/DefaultQuoteStrategy.php
class DefaultQuoteStrategy (line 23) | class DefaultQuoteStrategy implements QuoteStrategy
method getColumnName (line 27) | public function getColumnName(string $fieldName, ClassMetadata $class,...
method getTableName (line 39) | public function getTableName(ClassMetadata $class, AbstractPlatform $p...
method getSequenceName (line 61) | public function getSequenceName(array $definition, ClassMetadata $clas...
method getJoinColumnName (line 71) | public function getJoinColumnName(JoinColumnMapping $joinColumn, Class...
method getReferencedJoinColumnName (line 78) | public function getReferencedJoinColumnName(
method getJoinTableName (line 88) | public function getJoinTableName(
method getIdentifierColumnNames (line 111) | public function getIdentifierColumnNames(ClassMetadata $class, Abstrac...
method getColumnAlias (line 139) | public function getColumnAlias(
FILE: src/Mapping/DefaultTypedFieldMapper.php
class DefaultTypedFieldMapper (line 25) | final class DefaultTypedFieldMapper implements TypedFieldMapper
method __construct (line 42) | public function __construct(array $typedFieldMappings = [])
method validateAndComplete (line 55) | public function validateAndComplete(array $mapping, ReflectionProperty...
FILE: src/Mapping/DiscriminatorColumn.php
class DiscriminatorColumn (line 10) | #[Attribute(Attribute::TARGET_CLASS)]
method __construct (line 13) | public function __construct(
FILE: src/Mapping/DiscriminatorColumnMapping.php
class DiscriminatorColumnMapping (line 15) | final class DiscriminatorColumnMapping implements ArrayAccess
method __construct (line 30) | public function __construct(
method fromMappingArray (line 48) | public static function fromMappingArray(array $mappingArray): self
method __sleep (line 71) | public function __sleep(): array
FILE: src/Mapping/DiscriminatorMap.php
class DiscriminatorMap (line 9) | #[Attribute(Attribute::TARGET_CLASS)]
method __construct (line 13) | public function __construct(
FILE: src/Mapping/Driver/AttributeDriver.php
class AttributeDriver (line 26) | class AttributeDriver implements MappingDriver
method __construct (line 42) | public function __construct(array|ClassLocator $paths, bool $reportFie...
method isTransient (line 60) | public function isTransient(string $className): bool
method loadMetadataForClass (line 82) | public function loadMetadataForClass(string $className, PersistenceCla...
method getFetchMode (line 604) | private function getFetchMode(string $className, string $fetchMode): int
method getGeneratedMode (line 618) | private function getGeneratedMode(string $generatedMode): int
method getMethodCallbacks (line 633) | private function getMethodCallbacks(ReflectionMethod $method): array
method joinColumnToArray (line 689) | private function joinColumnToArray(Mapping\JoinColumn|Mapping\InverseJ...
method columnToArray (line 727) | private function columnToArray(string $fieldName, Mapping\Column $colu...
FILE: src/Mapping/Driver/AttributeReader.php
class AttributeReader (line 21) | final class AttributeReader
method getClassAttributes (line 31) | public function getClassAttributes(ReflectionClass $class): array
method getMethodAttributes (line 41) | public function getMethodAttributes(ReflectionMethod $method): array
method getPropertyAttributes (line 51) | public function getPropertyAttributes(ReflectionProperty $property): a...
method getPropertyAttribute (line 63) | public function getPropertyAttribute(ReflectionProperty $property, str...
method getPropertyAttributeCollection (line 82) | public function getPropertyAttributeCollection(
method convertToAttributeInstances (line 103) | private function convertToAttributeInstances(array $attributes): array
method isRepeatable (line 135) | private function isRepeatable(string $attributeClassName): bool
FILE: src/Mapping/Driver/DatabaseDriver.php
class DatabaseDriver (line 53) | class DatabaseDriver implements MappingDriver
method __construct (line 91) | public function __construct(private readonly AbstractSchemaManager $sm)
method setNamespace (line 99) | public function setNamespace(string $namespace): void
method isTransient (line 104) | public function isTransient(string $className): bool
method getAllClassNames (line 112) | public function getAllClassNames(): array
method setClassNameForTable (line 122) | public function setClassNameForTable(string $tableName, string $classN...
method setFieldNameForColumn (line 130) | public function setFieldNameForColumn(string $tableName, string $colum...
method setTables (line 143) | public function setTables(array $entityTables, array $manyToManyTables...
method setInflector (line 159) | public function setInflector(Inflector $inflector): void
method loadMetadataForClass (line 172) | public function loadMetadataForClass(string $className, PersistenceCla...
method reverseEngineerMappingFromDatabase (line 273) | private function reverseEngineerMappingFromDatabase(): void
method buildIndexes (line 329) | private function buildIndexes(ClassMetadata $metadata): void
method buildFieldMappings (line 360) | private function buildFieldMappings(ClassMetadata $metadata): void
method buildFieldMapping (line 420) | private function buildFieldMapping(string $tableName, Column $column):...
method buildToOneAssociationMappings (line 470) | private function buildToOneAssociationMappings(ClassMetadata $metadata...
method getTablePrimaryKeys (line 517) | private function getTablePrimaryKeys(Table $table): array
method getClassNameForTable (line 537) | private function getClassNameForTable(string $tableName): string
method getFieldNameForColumn (line 551) | private function getFieldNameForColumn(
method getReferencedTableName (line 570) | private static function getReferencedTableName(ForeignKeyConstraint $f...
method getReferencingColumnNames (line 580) | private static function getReferencingColumnNames(ForeignKeyConstraint...
method getReferencedColumnNames (line 590) | private static function getReferencedColumnNames(ForeignKeyConstraint ...
method getIndexedColumns (line 600) | private static function getIndexedColumns(Index $index): array
method getPrimaryKey (line 609) | private static function getPrimaryKey(Table $table): Index|null
method getAssetName (line 632) | private static function getAssetName(AbstractAsset $asset): string
FILE: src/Mapping/Driver/LoadMappingFileImplementation.php
type LoadMappingFileImplementation (line 13) | trait LoadMappingFileImplementation
method loadMappingFile (line 18) | protected function loadMappingFile($file): array
method loadMappingFile (line 30) | protected function loadMappingFile($file)
type LoadMappingFileImplementation (line 25) | trait LoadMappingFileImplementation
method loadMappingFile (line 18) | protected function loadMappingFile($file): array
method loadMappingFile (line 30) | protected function loadMappingFile($file)
FILE: src/Mapping/Driver/ReflectionBasedDriver.php
type ReflectionBasedDriver (line 11) | trait ReflectionBasedDriver
method isRepeatedPropertyDeclaration (line 23) | private function isRepeatedPropertyDeclaration(ReflectionProperty $pro...
FILE: src/Mapping/Driver/RepeatableAttributeCollection.php
class RepeatableAttributeCollection (line 14) | final class RepeatableAttributeCollection extends ArrayObject
FILE: src/Mapping/Driver/SimplifiedXmlDriver.php
class SimplifiedXmlDriver (line 12) | class SimplifiedXmlDriver extends XmlDriver
method __construct (line 19) | public function __construct($prefixes, $fileExtension = self::DEFAULT_...
FILE: src/Mapping/Driver/XmlDriver.php
class XmlDriver (line 42) | class XmlDriver extends FileDriver
method __construct (line 51) | public function __construct(
method loadMetadataForClass (line 80) | public function loadMetadataForClass($className, PersistenceClassMetad...
method parseOptions (line 662) | private function parseOptions(SimpleXMLElement|null $options): array
method parseObjectElement (line 713) | private function parseObjectElement(SimpleXMLElement $objectElement): ...
method joinColumnToArray (line 747) | private function joinColumnToArray(SimpleXMLElement $joinColumnElement...
method columnToArray (line 799) | private function columnToArray(SimpleXMLElement $fieldMapping): array
method cacheToArray (line 874) | private function cacheToArray(SimpleXMLElement $cacheMapping): array
method getCascadeMappings (line 901) | private function getCascadeMappings(SimpleXMLElement $cascadeElement):...
method doLoadMappingFile (line 920) | private function doLoadMappingFile(string $file): array
method validateMapping (line 951) | private function validateMapping(string $file): void
method evaluateBoolean (line 972) | protected function evaluateBoolean(mixed $element): bool
FILE: src/Mapping/Embeddable.php
class Embeddable (line 9) | #[Attribute(Attribute::TARGET_CLASS)]
FILE: src/Mapping/Embedded.php
class Embedded (line 9) | #[Attribute(Attribute::TARGET_PROPERTY)]
method __construct (line 12) | public function __construct(
FILE: src/Mapping/EmbeddedClassMapping.php
class EmbeddedClassMapping (line 12) | final class EmbeddedClassMapping implements ArrayAccess
method __construct (line 46) | public function __construct(public string $class)
method fromMappingArray (line 60) | public static function fromMappingArray(array $mappingArray): self
method __sleep (line 77) | public function __sleep(): array
FILE: src/Mapping/Entity.php
class Entity (line 11) | #[Attribute(Attribute::TARGET_CLASS)]
method __construct (line 15) | public function __construct(
FILE: src/Mapping/EntityListenerResolver.php
type EntityListenerResolver (line 10) | interface EntityListenerResolver
method clear (line 17) | public function clear(string|null $className = null): void;
method resolve (line 24) | public function resolve(string $className): object;
method register (line 29) | public function register(object $object): void;
FILE: src/Mapping/EntityListeners.php
class EntityListeners (line 13) | #[Attribute(Attribute::TARGET_CLASS)]
method __construct (line 17) | public function __construct(
FILE: src/Mapping/Exception/InvalidCustomGenerator.php
class InvalidCustomGenerator (line 13) | final class InvalidCustomGenerator extends LogicException implements ORM...
method onClassNotConfigured (line 15) | public static function onClassNotConfigured(): self
method onMissingClass (line 21) | public static function onMissingClass(array $definition): self
FILE: src/Mapping/Exception/UnknownGeneratorType.php
class UnknownGeneratorType (line 10) | final class UnknownGeneratorType extends LogicException implements ORMEx...
method create (line 12) | public static function create(int $generatorType): self
FILE: src/Mapping/FieldMapping.php
class FieldMapping (line 14) | final class FieldMapping implements ArrayAccess
method __construct (line 84) | public function __construct(
method fromMappingArray (line 120) | public static function fromMappingArray(array $mappingArray): self
method __sleep (line 141) | public function __sleep(): array
FILE: src/Mapping/GeneratedValue.php
class GeneratedValue (line 9) | #[Attribute(Attribute::TARGET_PROPERTY)]
method __construct (line 13) | public function __construct(
FILE: src/Mapping/GetReflectionClassImplementation.php
type GetReflectionClassImplementation (line 13) | trait GetReflectionClassImplementation
method getReflectionClass (line 15) | public function getReflectionClass(): ReflectionClass
method getReflectionClass (line 28) | public function getReflectionClass(): ReflectionClass|null
type GetReflectionClassImplementation (line 21) | trait GetReflectionClassImplementation
method getReflectionClass (line 15) | public function getReflectionClass(): ReflectionClass
method getReflectionClass (line 28) | public function getReflectionClass(): ReflectionClass|null
FILE: src/Mapping/HasLifecycleCallbacks.php
class HasLifecycleCallbacks (line 9) | #[Attribute(Attribute::TARGET_CLASS)]
FILE: src/Mapping/Id.php
class Id (line 9) | #[Attribute(Attribute::TARGET_PROPERTY)]
FILE: src/Mapping/Index.php
class Index (line 9) | #[Attribute(Attribute::TARGET_CLASS | Attribute::IS_REPEATABLE)]
method __construct (line 18) | public function __construct(
FILE: src/Mapping/InheritanceType.php
class InheritanceType (line 9) | #[Attribute(Attribute::TARGET_CLASS)]
method __construct (line 13) | public function __construct(
FILE: src/Mapping/InverseJoinColumn.php
class InverseJoinColumn (line 9) | #[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]
FILE: src/Mapping/InverseSideMapping.php
class InverseSideMapping (line 7) | abstract class InverseSideMapping extends AssociationMapping
method backRefFieldName (line 17) | final public function backRefFieldName(): string
method __sleep (line 23) | public function __sleep(): array
FILE: src/Mapping/JoinColumn.php
class JoinColumn (line 9) | #[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]
FILE: src/Mapping/JoinColumnMapping.php
class JoinColumnMapping (line 12) | final class JoinColumnMapping implements ArrayAccess
method __construct (line 27) | public function __construct(
method fromMappingArray (line 47) | public static function fromMappingArray(array $mappingArray): self
method __sleep (line 60) | public function __sleep(): array
FILE: src/Mapping/JoinColumnProperties.php
type JoinColumnProperties (line 7) | trait JoinColumnProperties
method __construct (line 10) | public function __construct(
FILE: src/Mapping/JoinColumns.php
class JoinColumns (line 7) | final class JoinColumns implements MappingAttribute
method __construct (line 10) | public function __construct(
FILE: src/Mapping/JoinTable.php
class JoinTable (line 9) | #[Attribute(Attribute::TARGET_PROPERTY)]
method __construct (line 23) | public function __construct(
FILE: src/Mapping/JoinTableMapping.php
class JoinTableMapping (line 13) | final class JoinTableMapping implements ArrayAccess
method __construct (line 30) | public function __construct(public string $name)
method fromMappingArray (line 45) | public static function fromMappingArray(array $mappingArray): self
method offsetSet (line 70) | public function offsetSet(mixed $offset, mixed $value): void
method toArray (line 85) | public function toArray(): array
method __sleep (line 102) | public function __sleep(): array
FILE: src/Mapping/LegacyReflectionFields.php
class LegacyReflectionFields (line 27) | class LegacyReflectionFields implements ArrayAccess, IteratorAggregate
method __construct (line 32) | public function __construct(private ClassMetadata $classMetadata, priv...
method offsetExists (line 37) | public function offsetExists($offset): bool // phpcs:ignore
method offsetGet (line 53) | public function offsetGet($field): mixed // phpcs:ignore
method offsetSet (line 123) | public function offsetSet($offset, $value): void // phpcs:ignore
method offsetUnset (line 129) | public function offsetUnset($offset): void // phpcs:ignore
method getAccessibleProperty (line 135) | private function getAccessibleProperty(string $class, string $field): ...
method getIterator (line 156) | public function getIterator(): Traversable
FILE: src/Mapping/ManyToMany.php
class ManyToMany (line 9) | #[Attribute(Attribute::TARGET_PROPERTY)]
method __construct (line 17) | public function __construct(
FILE: src/Mapping/ManyToManyAssociationMapping.php
type ManyToManyAssociationMapping (line 7) | interface ManyToManyAssociationMapping extends ToManyAssociationMapping
FILE: src/Mapping/ManyToManyInverseSideMapping.php
class ManyToManyInverseSideMapping (line 7) | final class ManyToManyInverseSideMapping extends ToManyInverseSideMappin...
FILE: src/Mapping/ManyToManyOwningSideMapping.php
class ManyToManyOwningSideMapping (line 12) | final class ManyToManyOwningSideMapping extends ToManyOwningSideMapping ...
method toArray (line 31) | public function toArray(): array
method fromMappingArrayAndNamingStrategy (line 62) | public static function fromMappingArrayAndNamingStrategy(array $mappin...
method __sleep (line 213) | public function __sleep(): array
FILE: src/Mapping/ManyToOne.php
class ManyToOne (line 9) | #[Attribute(Attribute::TARGET_PROPERTY)]
method __construct (line 17) | public function __construct(
FILE: src/Mapping/ManyToOneAssociationMapping.php
class ManyToOneAssociationMapping (line 10) | final class ManyToOneAssociationMapping extends ToOneOwningSideMapping
FILE: src/Mapping/MappedSuperclass.php
class MappedSuperclass (line 10) | #[Attribute(Attribute::TARGET_CLASS)]
method __construct (line 14) | public function __construct(
FILE: src/Mapping/MappingAttribute.php
type MappingAttribute (line 8) | interface MappingAttribute
FILE: src/Mapping/MappingException.php
class MappingException (line 27) | class MappingException extends PersistenceMappingException implements OR...
method identifierRequired (line 30) | public static function identifierRequired(string $entityName): self
method invalidAssociationType (line 47) | public static function invalidAssociationType(string $entityName, stri...
method invalidInheritanceType (line 57) | public static function invalidInheritanceType(string $entityName, int ...
method generatorNotAllowedWithCompositeId (line 62) | public static function generatorNotAllowedWithCompositeId(): self
method missingFieldName (line 67) | public static function missingFieldName(string $entity): self
method missingTargetEntity (line 75) | public static function missingTargetEntity(string $fieldName): self
method missingSourceEntity (line 80) | public static function missingSourceEntity(string $fieldName): self
method missingEmbeddedClass (line 85) | public static function missingEmbeddedClass(string $fieldName): self
method mappingFileNotFound (line 90) | public static function mappingFileNotFound(string $entityName, string ...
method invalidOverrideFieldName (line 100) | public static function invalidOverrideFieldName(string $className, str...
method invalidOverrideFieldType (line 110) | public static function invalidOverrideFieldType(string $className, str...
method mappingNotFound (line 119) | public static function mappingNotFound(string $className, string $fiel...
method queryNotFound (line 124) | public static function queryNotFound(string $className, string $queryN...
method resultMappingNotFound (line 129) | public static function resultMappingNotFound(string $className, string...
method emptyQueryMapping (line 134) | public static function emptyQueryMapping(string $entity, string $query...
method nameIsMandatoryForQueryMapping (line 139) | public static function nameIsMandatoryForQueryMapping(string $classNam...
method missingQueryMapping (line 144) | public static function missingQueryMapping(string $entity, string $que...
method missingResultSetMappingEntity (line 153) | public static function missingResultSetMappingEntity(string $entity, s...
method missingResultSetMappingFieldName (line 162) | public static function missingResultSetMappingFieldName(string $entity...
method oneToManyRequiresMappedBy (line 171) | public static function oneToManyRequiresMappedBy(string $entityName, s...
method joinTableRequired (line 180) | public static function joinTableRequired(string $fieldName): self
method missingRequiredOption (line 193) | public static function missingRequiredOption(string $field, string $ex...
method invalidMapping (line 207) | public static function invalidMapping(string $fieldName): self
method reflectionFailure (line 219) | public static function reflectionFailure(string $entity, ReflectionExc...
method joinColumnMustPointToMappedField (line 224) | public static function joinColumnMustPointToMappedField(string $classN...
method joinColumnNotAllowedOnOneToOneInverseSide (line 233) | public static function joinColumnNotAllowedOnOneToOneInverseSide(strin...
method classIsNotAValidEntityOrMappedSuperClass (line 243) | public static function classIsNotAValidEntityOrMappedSuperClass(string...
method duplicateFieldMapping (line 264) | public static function duplicateFieldMapping(string $entity, string $f...
method duplicateAssociationMapping (line 273) | public static function duplicateAssociationMapping(string $entity, str...
method duplicateQueryMapping (line 282) | public static function duplicateQueryMapping(string $entity, string $q...
method duplicateResultSetMapping (line 291) | public static function duplicateResultSetMapping(string $entity, strin...
method singleIdNotAllowedOnCompositePrimaryKey (line 300) | public static function singleIdNotAllowedOnCompositePrimaryKey(string ...
method noIdDefined (line 305) | public static function noIdDefined(string $entity): self
method unsupportedOptimisticLockingType (line 310) | public static function unsupportedOptimisticLockingType(string $entity...
method fileMappingDriversRequireConfiguredDirectoryPath (line 320) | public static function fileMappingDriversRequireConfiguredDirectoryPat...
method invalidEntriesInDiscriminatorMap (line 340) | public static function invalidEntriesInDiscriminatorMap(array $entries...
method invalidClassInDiscriminatorMap (line 357) | public static function invalidClassInDiscriminatorMap(string $classNam...
method duplicateDiscriminatorEntry (line 371) | public static function duplicateDiscriminatorEntry(string $className, ...
method missingInheritanceTypeDeclaration (line 388) | public static function missingInheritanceTypeDeclaration(string $rootE...
method missingDiscriminatorMap (line 397) | public static function missingDiscriminatorMap(string $className): self
method missingDiscriminatorColumn (line 405) | public static function missingDiscriminatorColumn(string $className): ...
method invalidDiscriminatorColumnType (line 413) | public static function invalidDiscriminatorColumnType(string $classNam...
method nameIsMandatoryForDiscriminatorColumns (line 422) | public static function nameIsMandatoryForDiscriminatorColumns(string $...
method cannotVersionIdField (line 427) | public static function cannotVersionIdField(string $className, string ...
method duplicateColumnName (line 436) | public static function duplicateColumnName(string $className, string $...
method illegalToManyAssociationOnMappedSuperclass (line 441) | public static function illegalToManyAssociationOnMappedSuperclass(stri...
method cannotMapCompositePrimaryKeyEntitiesAsForeignId (line 446) | public static function cannotMapCompositePrimaryKeyEntitiesAsForeignId...
method noSingleAssociationJoinColumnFound (line 452) | public static function noSingleAssociationJoinColumnFound(string $clas...
method noFieldNameFoundForColumn (line 457) | public static function noFieldNameFoundForColumn(string $className, st...
method illegalOrphanRemovalOnIdentifierAssociation (line 467) | public static function illegalOrphanRemovalOnIdentifierAssociation(str...
method illegalOrphanRemoval (line 476) | public static function illegalOrphanRemoval(string $className, string ...
method illegalInverseIdentifierAssociation (line 482) | public static function illegalInverseIdentifierAssociation(string $cla...
method illegalToManyIdentifierAssociation (line 491) | public static function illegalToManyIdentifierAssociation(string $clas...
method noInheritanceOnMappedSuperClass (line 500) | public static function noInheritanceOnMappedSuperClass(string $classNa...
method mappedClassNotPartOfDiscriminatorMap (line 505) | public static function mappedClassNotPartOfDiscriminatorMap(string $cl...
method lifecycleCallbackMethodNotFound (line 514) | public static function lifecycleCallbackMethodNotFound(string $classNa...
method illegalLifecycleCallbackOnEmbeddedClass (line 520) | public static function illegalLifecycleCallbackOnEmbeddedClass(string ...
method entityListenerClassNotFound (line 532) | public static function entityListenerClassNotFound(string $listenerNam...
method entityListenerMethodNotFound (line 537) | public static function entityListenerMethodNotFound(string $listenerNa...
method duplicateEntityListener (line 542) | public static function duplicateEntityListener(string $listenerName, s...
method invalidFetchMode (line 548) | public static function invalidFetchMode(string $className, string $fet...
method invalidGeneratedMode (line 553) | public static function invalidGeneratedMode(int|string $generatedMode)...
method compositeKeyAssignedIdGeneratorRequired (line 558) | public static function compositeKeyAssignedIdGeneratorRequired(string ...
method invalidTargetEntityClass (line 563) | public static function invalidTargetEntityClass(string $targetEntity, ...
method invalidCascadeOption (line 569) | public static function invalidCascadeOption(array $cascades, string $c...
method missingSequenceName (line 581) | public static function missingSequenceName(string $className): self
method infiniteEmbeddableNesting (line 588) | public static function infiniteEmbeddableNesting(string $className, st...
method illegalOverrideOfInheritedProperty (line 600) | public static function illegalOverrideOfInheritedProperty(string $clas...
method invalidIndexConfiguration (line 612) | public static function invalidIndexConfiguration(string $className, st...
method invalidUniqueConstraintConfiguration (line 623) | public static function invalidUniqueConstraintConfiguration(string $cl...
method invalidOverrideType (line 634) | public static function invalidOverrideType(string $expectdType, mixed ...
method backedEnumTypeRequired (line 643) | public static function backedEnumTypeRequired(string $className, strin...
method nonEnumTypeMapped (line 653) | public static function nonEnumTypeMapped(string $className, string $fi...
method invalidEnumValue (line 667) | public static function invalidEnumValue(
method fromLibXmlErrors (line 689) | public static function fromLibXmlErrors(array $errors): self
method invalidAttributeOnEmbeddable (line 701) | public static function invalidAttributeOnEmbeddable(string $entityName...
method mappingVirtualPropertyNotAllowed (line 710) | public static function mappingVirtualPropertyNotAllowed(string $entity...
FILE: src/Mapping/NamingStrategy.php
type NamingStrategy (line 12) | interface NamingStrategy
method classToTableName (line 19) | public function classToTableName(string $className): string;
method propertyToColumnName (line 26) | public function propertyToColumnName(string $propertyName, string $cla...
method embeddedFieldToColumnName (line 34) | public function embeddedFieldToColumnName(
method referenceColumnName (line 44) | public function referenceColumnName(): string;
method joinColumnName (line 51) | public function joinColumnName(string $propertyName, string $className...
method joinTableName (line 59) | public function joinTableName(string $sourceEntity, string $targetEnti...
method joinKeyColumnName (line 70) | public function joinKeyColumnName(string $entityName, string|null $ref...
FILE: src/Mapping/OneToMany.php
class OneToMany (line 9) | #[Attribute(Attribute::TARGET_PROPERTY)]
method __construct (line 17) | public function __construct(
FILE: src/Mapping/OneToManyAssociationMapping.php
class OneToManyAssociationMapping (line 7) | final class OneToManyAssociationMapping extends ToManyInverseSideMapping
method fromMappingArray (line 31) | public static function fromMappingArray(array $mappingArray): static
method fromMappingArrayAndName (line 64) | public static function fromMappingArrayAndName(array $mappingArray, st...
FILE: src/Mapping/OneToOne.php
class OneToOne (line 9) | #[Attribute(Attribute::TARGET_PROPERTY)]
method __construct (line 17) | public function __construct(
FILE: src/Mapping/OneToOneAssociationMapping.php
type OneToOneAssociationMapping (line 7) | interface OneToOneAssociationMapping extends ToOneAssociationMapping
FILE: src/Mapping/OneToOneInverseSideMapping.php
class OneToOneInverseSideMapping (line 7) | final class OneToOneInverseSideMapping extends ToOneInverseSideMapping i...
FILE: src/Mapping/OneToOneOwningSideMapping.php
class OneToOneOwningSideMapping (line 7) | final class OneToOneOwningSideMapping extends ToOneOwningSideMapping imp...
FILE: src/Mapping/OrderBy.php
class OrderBy (line 9) | #[Attribute(Attribute::TARGET_PROPERTY)]
method __construct (line 13) | public function __construct(
FILE: src/Mapping/OwningSideMapping.php
class OwningSideMapping (line 7) | abstract class OwningSideMapping extends AssociationMapping
method __sleep (line 18) | public function __sleep(): array
FILE: src/Mapping/PostLoad.php
class PostLoad (line 9) | #[Attribute(Attribute::TARGET_METHOD)]
FILE: src/Mapping/PostPersist.php
class PostPersist (line 9) | #[Attribute(Attribute::TARGET_METHOD)]
FILE: src/Mapping/PostRemove.php
class PostRemove (line 9) | #[Attribute(Attribute::TARGET_METHOD)]
FILE: src/Mapping/PostUpdate.php
class PostUpdate (line 9) | #[Attribute(Attribute::TARGET_METHOD)]
FILE: src/Mapping/PreFlush.php
class PreFlush (line 9) | #[Attribute(Attribute::TARGET_METHOD)]
FILE: src/Mapping/PrePersist.php
class PrePersist (line 9) | #[Attribute(Attribute::TARGET_METHOD)]
FILE: src/Mapping/PreRemove.php
class PreRemove (line 9) | #[Attribute(Attribute::TARGET_METHOD)]
FILE: src/Mapping/PreUpdate.php
class PreUpdate (line 9) | #[Attribute(Attribute::TARGET_METHOD)]
FILE: src/Mapping/PropertyAccessors/EmbeddablePropertyAccessor.php
class EmbeddablePropertyAccessor (line 11) | class EmbeddablePropertyAccessor implements PropertyAccessor
method __construct (line 15) | public function __construct(
method setValue (line 23) | public function setValue(object $object, mixed $value): void
method getValue (line 38) | public function getValue(object $object): mixed
method getUnderlyingReflector (line 49) | public function getUnderlyingReflector(): ReflectionProperty
FILE: src/Mapping/PropertyAccessors/EnumPropertyAccessor.php
class EnumPropertyAccessor (line 15) | class EnumPropertyAccessor implements PropertyAccessor
method __construct (line 18) | public function __construct(private PropertyAccessor $parent, private ...
method setValue (line 22) | public function setValue(object $object, mixed $value): void
method getValue (line 31) | public function getValue(object $object): mixed
method fromEnum (line 47) | private function fromEnum($enum) // phpcs:ignore
method toEnum (line 63) | private function toEnum($value): BackedEnum|array
method getUnderlyingReflector (line 81) | public function getUnderlyingReflector(): ReflectionProperty
FILE: src/Mapping/PropertyAccessors/ObjectCastPropertyAccessor.php
class ObjectCastPropertyAccessor (line 13) | class ObjectCastPropertyAccessor implements PropertyAccessor
method fromNames (line 16) | public static function fromNames(string $class, string $name): self
method fromReflectionProperty (line 25) | public static function fromReflectionProperty(ReflectionProperty $refl...
method __construct (line 33) | private function __construct(private ReflectionProperty $reflectionPro...
method setValue (line 37) | public function setValue(object $object, mixed $value): void
method getValue (line 52) | public function getValue(object $object): mixed
method getUnderlyingReflector (line 57) | public function getUnderlyingReflector(): ReflectionProperty
FILE: src/Mapping/PropertyAccessors/PropertyAccessor.php
type PropertyAccessor (line 20) | interface PropertyAccessor
method setValue (line 22) | public function setValue(object $object, mixed $value): void;
method getValue (line 24) | public function getValue(object $object): mixed;
method getUnderlyingReflector (line 26) | public function getUnderlyingReflector(): ReflectionProperty;
FILE: src/Mapping/PropertyAccessors/PropertyAccessorFactory.php
class PropertyAccessorFactory (line 11) | class PropertyAccessorFactory
method createPropertyAccessor (line 14) | public static function createPropertyAccessor(string $className, strin...
FILE: src/Mapping/PropertyAccessors/RawValuePropertyAccessor.php
class RawValuePropertyAccessor (line 22) | class RawValuePropertyAccessor implements PropertyAccessor
method fromReflectionProperty (line 24) | public static function fromReflectionProperty(ReflectionProperty $refl...
method __construct (line 32) | private function __construct(private ReflectionProperty $reflectionPro...
method setValue (line 39) | public function setValue(object $object, mixed $value): void
method getValue (line 54) | public function getValue(object $object): mixed
method getUnderlyingReflector (line 59) | public function getUnderlyingReflector(): ReflectionProperty
FILE: src/Mapping/PropertyAccessors/ReadonlyAccessor.php
class ReadonlyAccessor (line 16) | class ReadonlyAccessor implements PropertyAccessor
method __construct (line 18) | public function __construct(private PropertyAccessor $parent, private ...
method setValue (line 29) | public function setValue(object $object, mixed $value): void
method getValue (line 51) | public function getValue(object $object): mixed
method getUnderlyingReflector (line 56) | public function getUnderlyingReflector(): ReflectionProperty
FILE: src/Mapping/PropertyAccessors/TypedNoDefaultPropertyAccessor.php
class TypedNoDefaultPropertyAccessor (line 15) | class TypedNoDefaultPropertyAccessor implements PropertyAccessor
method __construct (line 19) | public function __construct(private PropertyAccessor $parent, private ...
method setValue (line 38) | public function setValue(object $object, mixed $value): void
method getValue (line 60) | public function getValue(object $object): mixed
method getUnderlyingReflector (line 65) | public function getUnderlyingReflector(): ReflectionProperty
FILE: src/Mapping/QuoteStrategy.php
type QuoteStrategy (line 12) | interface QuoteStrategy
method getColumnName (line 17) | public function getColumnName(string $fieldName, ClassMetadata $class,...
method getTableName (line 22) | public function getTableName(ClassMetadata $class, AbstractPlatform $p...
method getSequenceName (line 29) | public function getSequenceName(array $definition, ClassMetadata $clas...
method getJoinTableName (line 32) | public function getJoinTableName(
method getJoinColumnName (line 41) | public function getJoinColumnName(JoinColumnMapping $joinColumn, Class...
method getReferencedJoinColumnName (line 46) | public function getReferencedJoinColumnName(
method getIdentifierColumnNames (line 57) | public function getIdentifierColumnNames(ClassMetadata $class, Abstrac...
method getColumnAlias (line 62) | public function getColumnAlias(
FILE: src/Mapping/ReflectionEmbeddedProperty.php
class ReflectionEmbeddedProperty (line 19) | final class ReflectionEmbeddedProperty extends ReflectionProperty
method __construct (line 28) | public function __construct(
method getValue (line 36) | public function getValue(object|null $object = null): mixed
method setValue (line 47) | public function setValue(mixed $object, mixed $value = null): void
FILE: src/Mapping/ReflectionEnumProperty.php
class ReflectionEnumProperty (line 15) | final class ReflectionEnumProperty extends ReflectionProperty
method __construct (line 18) | public function __construct(
method getValue (line 28) | public function getValue(object|null $object = null): int|string|array...
method setValue (line 54) | public function setValue(mixed $object, mixed $value = null): void
method initializeEnumValue (line 67) | private function initializeEnumValue(object $object, int|string|Backed...
FILE: src/Mapping/ReflectionReadonlyProperty.php
class ReflectionReadonlyProperty (line 18) | final class ReflectionReadonlyProperty extends ReflectionProperty
method __construct (line 20) | public function __construct(
method getValue (line 30) | public function getValue(object|null $object = null): mixed
method setValue (line 35) | public function setValue(mixed $objectOrValue, mixed $value = null): void
FILE: src/Mapping/SequenceGenerator.php
class SequenceGenerator (line 9) | #[Attribute(Attribute::TARGET_PROPERTY)]
method __construct (line 12) | public function __construct(
FILE: src/Mapping/Table.php
class Table (line 10) | #[Attribute(Attribute::TARGET_CLASS)]
method __construct (line 18) | public function __construct(
FILE: src/Mapping/ToManyAssociationMapping.php
type ToManyAssociationMapping (line 7) | interface ToManyAssociationMapping
method isIndexed (line 10) | public function isIndexed(): bool;
method indexBy (line 12) | public function indexBy(): string;
method orderBy (line 15) | public function orderBy(): array;
FILE: src/Mapping/ToManyAssociationMappingImplementation.php
type ToManyAssociationMappingImplementation (line 12) | trait ToManyAssociationMappingImplementation
method orderBy (line 30) | final public function orderBy(): array
method isIndexed (line 36) | final public function isIndexed(): bool
method indexBy (line 41) | final public function indexBy(): string
method __sleep (line 55) | public function __sleep(): array
FILE: src/Mapping/ToManyInverseSideMapping.php
class ToManyInverseSideMapping (line 7) | abstract class ToManyInverseSideMapping extends InverseSideMapping imple...
FILE: src/Mapping/ToManyOwningSideMapping.php
class ToManyOwningSideMapping (line 7) | abstract class ToManyOwningSideMapping extends OwningSideMapping
FILE: src/Mapping/ToOneAssociationMapping.php
type ToOneAssociationMapping (line 7) | interface ToOneAssociationMapping
FILE: src/Mapping/ToOneInverseSideMapping.php
class ToOneInverseSideMapping (line 7) | abstract class ToOneInverseSideMapping extends InverseSideMapping
method fromMappingArrayAndName (line 32) | public static function fromMappingArrayAndName(
FILE: src/Mapping/ToOneOwningSideMapping.php
class ToOneOwningSideMapping (line 15) | abstract class ToOneOwningSideMapping extends OwningSideMapping implemen...
method fromMappingArray (line 52) | public static function fromMappingArray(array $mappingArray): static
method fromMappingArrayAndName (line 99) | public static function fromMappingArrayAndName(
method offsetSet (line 195) | public function offsetSet(mixed $offset, mixed $value): void
method toArray (line 212) | public function toArray(): array
method __sleep (line 232) | public function __sleep(): array
FILE: src/Mapping/TypedFieldMapper.php
type TypedFieldMapper (line 10) | interface TypedFieldMapper
method validateAndComplete (line 19) | public function validateAndComplete(array $mapping, ReflectionProperty...
FILE: src/Mapping/UnderscoreNamingStrategy.php
class UnderscoreNamingStrategy (line 23) | class UnderscoreNamingStrategy implements NamingStrategy
method __construct (line 30) | public function __construct(private int $case = CASE_LOWER)
method getCase (line 35) | public function getCase(): int
method setCase (line 44) | public function setCase(int $case): void
method classToTableName (line 49) | public function classToTableName(string $className): string
method propertyToColumnName (line 58) | public function propertyToColumnName(string $propertyName, string $cla...
method embeddedFieldToColumnName (line 63) | public function embeddedFieldToColumnName(
method referenceColumnName (line 72) | public function referenceColumnName(): string
method joinColumnName (line 77) | public function joinColumnName(string $propertyName, string $className...
method joinTableName (line 82) | public function joinTableName(
method joinKeyColumnName (line 90) | public function joinKeyColumnName(
method underscore (line 98) | private function underscore(string $string): string
FILE: src/Mapping/UniqueConstraint.php
class UniqueConstraint (line 9) | #[Attribute(Attribute::TARGET_CLASS | Attribute::IS_REPEATABLE)]
method __construct (line 17) | public function __construct(
FILE: src/Mapping/Version.php
class Version (line 9) | #[Attribute(Attribute::TARGET_PROPERTY)]
FILE: src/NativeQuery.php
class NativeQuery (line 20) | class NativeQuery extends AbstractQuery
method setSQL (line 25) | public function setSQL(string $sql): self
method getSQL (line 32) | public function getSQL(): string
method _doExecute (line 37) | protected function _doExecute(): Result|int
FILE: src/NoResultException.php
class NoResultException (line 10) | class NoResultException extends UnexpectedResultException
method __construct (line 12) | public function __construct()
FILE: src/NonUniqueResultException.php
class NonUniqueResultException (line 10) | class NonUniqueResultException extends UnexpectedResultException
method __construct (line 14) | public function __construct(string|null $message = null)
FILE: src/ORMInvalidArgumentException.php
class ORMInvalidArgumentException (line 25) | class ORMInvalidArgumentException extends InvalidArgumentException
method scheduleInsertForManagedEntity (line 27) | public static function scheduleInsertForManagedEntity(object $entity):...
method scheduleInsertForRemovedEntity (line 32) | public static function scheduleInsertForRemovedEntity(object $entity):...
method scheduleInsertTwice (line 37) | public static function scheduleInsertTwice(object $entity): self
method entityWithoutIdentity (line 42) | public static function entityWithoutIdentity(string $className, object...
method readOnlyRequiresManagedEntity (line 50) | public static function readOnlyRequiresManagedEntity(object $entity): ...
method newEntitiesFoundThroughRelationships (line 56) | public static function newEntitiesFoundThroughRelationships(array $new...
method newEntityFoundThroughRelationship (line 78) | public static function newEntityFoundThroughRelationship(AssociationMa...
method detachedEntityFoundThroughRelationship (line 83) | public static function detachedEntityFoundThroughRelationship(Associat...
method entityNotManaged (line 90) | public static function entityNotManaged(object $entity): self
method entityHasNoIdentity (line 96) | public static function entityHasNoIdentity(object $entity, string $ope...
method entityIsRemoved (line 101) | public static function entityIsRemoved(object $entity, string $operati...
method detachedEntityCannot (line 106) | public static function detachedEntityCannot(object $entity, string $op...
method invalidObject (line 111) | public static function invalidObject(string $context, mixed $given, in...
method invalidCompositeIdentifier (line 117) | public static function invalidCompositeIdentifier(): self
method invalidIdentifierBindingEntity (line 123) | public static function invalidIdentifierBindingEntity(string $class): ...
method invalidAssociation (line 135) | public static function invalidAssociation(ClassMetadata $targetClass, ...
method invalidAutoGenerateMode (line 148) | public static function invalidAutoGenerateMode(mixed $value): self
method missingPrimaryKeyValue (line 153) | public static function missingPrimaryKeyValue(string $className, strin...
method proxyDirectoryRequired (line 158) | public static function proxyDirectoryRequired(): self
method lazyGhostUnavailable (line 163) | public static function lazyGhostUnavailable(): self
method proxyNamespaceRequired (line 168) | public static function proxyNamespaceRequired(): self
method proxyDirectoryNotWritable (line 173) | public static function proxyDirectoryNotWritable(string $proxyDirector...
method objToStr (line 181) | private static function objToStr(object $obj): string
method newEntityFoundThroughRelationshipMessage (line 186) | private static function newEntityFoundThroughRelationshipMessage(Assoc...
FILE: src/ORMSetup.php
class ORMSetup (line 27) | final class ORMSetup
method createAttributeMetadataConfiguration (line 34) | public static function createAttributeMetadataConfiguration(
method createAttributeMetadataConfig (line 61) | public static function createAttributeMetadataConfig(
method createXMLMetadataConfiguration (line 78) | public static function createXMLMetadataConfiguration(
method createXMLMetadataConfig (line 106) | public static function createXMLMetadataConfig(
method createConfiguration (line 126) | public static function createConfiguration(
method createConfig (line 157) | public static function createConfig(
method createCacheInstance (line 171) | private static function createCacheInstance(
method __construct (line 211) | private function __construct()
FILE: src/OptimisticLockException.php
class OptimisticLockException (line 16) | class OptimisticLockException extends Exception implements ORMException
method __construct (line 18) | public function __construct(
method getEntity (line 29) | public function getEntity(): object|string|null
method lockFailed (line 35) | public static function lockFailed(object|string $entity): self
method lockFailedVersionMismatch (line 40) | public static function lockFailedVersionMismatch(
method notVersioned (line 51) | public static function notVersioned(string $entityName): self
FILE: src/PersistentCollection.php
class PersistentCollection (line 43) | final class PersistentCollection extends AbstractLazyCollection implemen...
method __construct (line 85) | public function __construct(
method setOwner (line 99) | public function setOwner(object $entity, AssociationMapping&ToManyAsso...
method getOwner (line 110) | public function getOwner(): object|null
method getTypeClass (line 115) | public function getTypeClass(): ClassMetadata
method getUnitOfWork (line 122) | private function getUnitOfWork(): UnitOfWork
method hydrateAdd (line 134) | public function hydrateAdd(mixed $element): void
method hydrateSet (line 160) | public function hydrateSet(mixed $key, mixed $element): void
method initialize (line 180) | public function initialize(): void
method takeSnapshot (line 195) | public function takeSnapshot(): void
method getSnapshot (line 207) | public function getSnapshot(): array
method getDeleteDiff (line 218) | public function getDeleteDiff(): array
method getInsertDiff (line 234) | public function getInsertDiff(): array
method getMapping (line 245) | public function getMapping(): AssociationMapping&ToManyAssociationMapping
method changed (line 257) | private function changed(): void
method isDirty (line 270) | public function isDirty(): bool
method setDirty (line 278) | public function setDirty(bool $dirty): void
method setInitialized (line 286) | public function setInitialized(bool $bool): void
method remove (line 291) | public function remove(string|int $key): mixed
method removeElement (line 317) | public function removeElement(mixed $element): bool
method containsKey (line 339) | public function containsKey(mixed $key): bool
method contains (line 353) | public function contains(mixed $element): bool
method get (line 364) | public function get(string|int $key): mixed
method count (line 383) | public function count(): int
method set (line 394) | public function set(string|int $key, mixed $value): void
method add (line 405) | public function add(mixed $value): bool
method offsetExists (line 418) | public function offsetExists(mixed $offset): bool
method offsetGet (line 423) | public function offsetGet(mixed $offset): mixed
method offsetSet (line 428) | public function offsetSet(mixed $offset, mixed $value): void
method offsetUnset (line 439) | public function offsetUnset(mixed $offset): void
method isEmpty (line 444) | public function isEmpty(): bool
method clear (line 449) | public function clear(): void
method __sleep (line 497) | public function __sleep(): array
method __wakeup (line 502) | public function __wakeup(): void
method first (line 510) | public function first()
method slice (line 531) | public function slice(int $offset, int|null $length = null): array
method __clone (line 553) | public function __clone()
method matching (line 575) | public function matching(Criteria $criteria): Collection
method unwrap (line 618) | public function unwrap(): Selectable&Collection
method doInitialize (line 626) | protected function doInitialize(): void
method restoreNewObjectsInDirtyCollection (line 652) | private function restoreNewObjectsInDirtyCollection(array $newObjects)...
FILE: src/Persisters/Collection/AbstractCollectionPersister.php
class AbstractCollectionPersister (line 16) | abstract class AbstractCollectionPersister implements CollectionPersister
method __construct (line 26) | public function __construct(
method isValidEntityState (line 38) | protected function isValidEntityState(object $entity): bool
FILE: src/Persisters/Collection/CollectionPersister.php
type CollectionPersister (line 13) | interface CollectionPersister
method delete (line 18) | public function delete(PersistentCollection $collection): void;
method update (line 24) | public function update(PersistentCollection $collection): void;
method count (line 29) | public function count(PersistentCollection $collection): int;
method slice (line 36) | public function slice(PersistentCollection $collection, int $offset, i...
method contains (line 41) | public function contains(PersistentCollection $collection, object $ele...
method containsKey (line 46) | public function containsKey(PersistentCollection $collection, mixed $k...
method get (line 51) | public function get(PersistentCollection $collection, mixed $index): m...
method loadCriteria (line 58) | public function loadCriteria(PersistentCollection $collection, Criteri...
FILE: src/Persisters/Collection/ManyToManyPersister.php
class ManyToManyPersister (line 34) | class ManyToManyPersister extends AbstractCollectionPersister
method delete (line 36) | public function delete(PersistentCollection $collection): void
method update (line 56) | public function update(PersistentCollection $collection): void
method get (line 84) | public function get(PersistentCollection $collection, mixed $index): o...
method count (line 109) | public function count(PersistentCollection $collection): int
method slice (line 165) | public function slice(PersistentCollection $collection, int $offset, i...
method containsKey (line 173) | public function containsKey(PersistentCollection $collection, mixed $k...
method contains (line 192) | public function contains(PersistentCollection $collection, object $ele...
method loadCriteria (line 212) | public function loadCriteria(PersistentCollection $collection, Criteri...
method getFilterSql (line 305) | public function getFilterSql(AssociationMapping $mapping): array
method generateFilterConditionSQL (line 331) | protected function generateFilterConditionSQL(ClassMetadata $targetEnt...
method getOnConditionSQL (line 353) | protected function getOnConditionSQL(AssociationMapping $mapping): array
method getDeleteSQL (line 373) | protected function getDeleteSQL(PersistentCollection $collection): string
method getDeleteSQLParameters (line 394) | protected function getDeleteSQLParameters(PersistentCollection $collec...
method getDeleteRowSQL (line 425) | protected function getDeleteRowSQL(PersistentCollection $collection): ...
method getDeleteRowSQLParameters (line 460) | protected function getDeleteRowSQLParameters(PersistentCollection $col...
method getInsertRowSQL (line 472) | protected function getInsertRowSQL(PersistentCollection $collection): ...
method getInsertRowSQLParameters (line 509) | protected function getInsertRowSQLParameters(PersistentCollection $col...
method collectJoinTableColumnParameters (line 521) | private function collectJoinTableColumnParameters(
method getJoinTableRestrictionsWithKey (line 570) | private function getJoinTableRestrictionsWithKey(
method getJoinTableRestrictions (line 660) | private function getJoinTableRestrictions(
method expandCriteriaParameters (line 724) | private function expandCriteriaParameters(Criteria $criteria): array
method getOrderingSql (line 741) | private function getOrderingSql(Criteria $criteria, ClassMetadata $tar...
method getLimitSql (line 762) | private function getLimitSql(Criteria $criteria): string
method getMapping (line 770) | private function getMapping(PersistentCollection $collection): Associa...
FILE: src/Persisters/Collection/OneToManyPersister.php
class OneToManyPersister (line 30) | class OneToManyPersister extends AbstractCollectionPersister
method delete (line 32) | public function delete(PersistentCollection $collection): void
method update (line 53) | public function update(PersistentCollection $collection): void
method get (line 61) | public function get(PersistentCollection $collection, mixed $index): o...
method count (line 84) | public function count(PersistentCollection $collection): int
method slice (line 100) | public function slice(PersistentCollection $collection, int $offset, i...
method containsKey (line 108) | public function containsKey(PersistentCollection $collection, mixed $k...
method contains (line 129) | public function contains(PersistentCollection $collection, object $ele...
method loadCriteria (line 149) | public function loadCriteria(PersistentCollection $collection, Criteri...
method deleteEntityCollection (line 159) | private function deleteEntityCollection(PersistentCollection $collecti...
method deleteJoinedEntityCollection (line 203) | private function deleteJoinedEntityCollection(PersistentCollection $co...
method getMapping (line 262) | private function getMapping(PersistentCollection $collection): OneToMa...
FILE: src/Persisters/Entity/AbstractEntityInheritancePersister.php
class AbstractEntityInheritancePersister (line 17) | abstract class AbstractEntityInheritancePersister extends BasicEntityPer...
method prepareInsertData (line 22) | protected function prepareInsertData(object $entity): array
method getDiscriminatorColumnTableName (line 37) | abstract protected function getDiscriminatorColumnTableName(): string;
method getSelectColumnSQL (line 39) | protected function getSelectColumnSQL(string $field, ClassMetadata $cl...
method getSelectJoinColumnSQL (line 58) | protected function getSelectJoinColumnSQL(string $tableAlias, string $...
FILE: src/Persisters/Entity/BasicEntityPersister.php
class BasicEntityPersister (line 97) | class BasicEntityPersister implements EntityPersister
method __construct (line 176) | public function __construct(
method isFilterHashUpToDate (line 196) | final protected function isFilterHashUpToDate(): bool
method updateFilterHash (line 201) | final protected function updateFilterHash(): void
method getClassMetadata (line 206) | public function getClassMetadata(): ClassMetadata
method getResultSetMapping (line 211) | public function getResultSetMapping(): ResultSetMapping
method addInsert (line 216) | public function addInsert(object $entity): void
method getInserts (line 224) | public function getInserts(): array
method executeInserts (line 229) | public function executeInserts(): void
method assignDefaultVersionAndUpsertableValues (line 288) | protected function assignDefaultVersionAndUpsertableValues(object $ent...
method fetchVersionAndNotUpsertableValues (line 305) | protected function fetchVersionAndNotUpsertableValues(ClassMetadata $v...
method extractIdentifierTypes (line 349) | final protected function extractIdentifierTypes(array $id, ClassMetada...
method update (line 360) | public function update(object $entity): void
method updateTable (line 399) | final protected function updateTable(
method deleteJoinTableRecords (line 507) | protected function deleteJoinTableRecords(array $identifier, array $ty...
method delete (line 556) | public function delete(object $entity): bool
method prepareUpdateData (line 593) | protected function prepareUpdateData(object $entity, bool $isInsert = ...
method prepareInsertData (line 712) | protected function prepareInsertData(object $entity): array
method getOwningTable (line 717) | public function getOwningTable(string $fieldName): string
method load (line 725) | public function load(
method loadById (line 754) | public function loadById(array $identifier, object|null $entity = null...
method loadOneToOneEntity (line 762) | public function loadOneToOneEntity(AssociationMapping $assoc, object $...
method refresh (line 849) | public function refresh(array $id, object $entity, LockMode|int|null $...
method count (line 859) | public function count(array|Criteria $criteria = []): int
method loadCriteria (line 876) | public function loadCriteria(Criteria $criteria): array
method expandCriteriaParameters (line 897) | public function expandCriteriaParameters(Criteria $criteria): array
method loadAll (line 953) | public function loadAll(
method getManyToManyCollection (line 973) | public function getManyToManyCollection(
method loadArrayFromResult (line 992) | private function loadArrayFromResult(AssociationMapping $assoc, Result...
method loadCollectionFromStatement (line 1010) | private function loadCollectionFromStatement(
method loadManyToManyCollection (line 1032) | public function loadManyToManyCollection(AssociationMapping $assoc, ob...
method getManyToManyStatement (line 1041) | private function getManyToManyStatement(
method getSelectSQL (line 1109) | public function getSelectSQL(
method getCountSQL (line 1169) | public function getCountSQL(array|Criteria $criteria = []): string
method getOrderBySQL (line 1200) | final protected function getOrderBySQL(array $orderBy, string $baseTab...
method getSelectColumnsSQL (line 1257) | protected function getSelectColumnsSQL(): string
method getSelectColumnAssociationSQL (line 1381) | protected function getSelectColumnAssociationSQL(
method getSelectManyToManyJoinSQL (line 1413) | protected function getSelectManyToManyJoinSQL(AssociationMapping&ManyT...
method getInsertSQL (line 1434) | public function getInsertSQL(): string
method getInsertColumnList (line 1477) | protected function getInsertColumnList(): array
method getSelectColumnSQL (line 1521) | protected function getSelectColumnSQL(string $field, ClassMetadata $cl...
method getSQLTableAlias (line 1553) | protected function getSQLTableAlias(string $className, string $assocNa...
method lock (line 1573) | public function lock(array $criteria, LockMode|int $lockMode): void
method getLockTablesSql (line 1600) | protected function getLockTablesSql(LockMode|int $lockMode): string
method getSelectConditionCriteriaSQL (line 1613) | protected function getSelectConditionCriteriaSQL(Criteria $criteria): ...
method getSelectConditionStatementSQL (line 1626) | public function getSelectConditionStatementSQL(
method getSelectConditionStatementColumnSQL (line 1711) | private function getSelectConditionStatementColumnSQL(
method getSelectConditionSQL (line 1783) | protected function getSelectConditionSQL(array $criteria, AssociationM...
method getOneToManyCollection (line 1797) | public function getOneToManyCollection(
method loadOneToManyCollection (line 1811) | public function loadOneToManyCollection(
method getOneToManyStatement (line 1823) | private function getOneToManyStatement(
method expandParameters (line 1878) | public function expandParameters(array $criteria): array
method expandToManyParameters (line 1917) | private function expandToManyParameters(array $criteria): array
method exists (line 1934) | public function exists(object $entity, Criteria|null $extraConditions ...
method getJoinSQLForJoinColumns (line 1973) | protected function getJoinSQLForJoinColumns(array $joinColumns): string
method getSQLColumnAlias (line 1985) | public function getSQLColumnAlias(string $columnName): string
method generateFilterConditionSQL (line 1998) | protected function generateFilterConditionSQL(ClassMetadata $targetEnt...
method switchPersisterContext (line 2019) | protected function switchPersisterContext(int|null $offset, int|null $...
method getClassIdentifiersTypes (line 2034) | protected function getClassIdentifiersTypes(ClassMetadata $class): array
FILE: src/Persisters/Entity/CachedPersisterContext.php
class CachedPersisterContext (line 19) | class CachedPersisterContext
method __construct (line 45) | public function __construct(
FILE: src/Persisters/Entity/EntityPersister.php
type EntityPersister (line 21) | interface EntityPersister
method getClassMetadata (line 23) | public function getClassMetadata(): ClassMetadata;
method getResultSetMapping (line 28) | public function getResultSetMapping(): ResultSetMapping;
method getInserts (line 35) | public function getInserts(): array;
method getInsertSQL (line 43) | public function getInsertSQL(): string;
method getSelectSQL (line 53) | public function getSelectSQL(
method getCountSQL (line 67) | public function getCountSQL(array|Criteria $criteria = []): string;
method expandParameters (line 76) | public function expandParameters(array $criteria): array;
method expandCriteriaParameters (line 83) | public function expandCriteriaParameters(Criteria $criteria): array;
method getSelectConditionStatementSQL (line 86) | public function getSelectConditionStatementSQL(
method addInsert (line 97) | public function addInsert(object $entity): void;
method executeInserts (line 104) | public function executeInserts(): void;
method update (line 110) | public function update(object $entity): void;
method delete (line 122) | public function delete(object $entity): bool;
method count (line 131) | public function count(array|Criteria $criteria = []): int;
method getOwningTable (line 140) | public function getOwningTable(string $fieldName): string;
method load (line 165) | public function load(
method loadById (line 185) | public function loadById(array $identifier, object|null $entity = null...
method loadOneToOneEntity (line 201) | public function loadOneToOneEntity(AssociationMapping $assoc, object $...
method refresh (line 214) | public function refresh(array $id, object $entity, LockMode|int|null $...
method loadCriteria (line 221) | public function loadCriteria(Criteria $criteria): array;
method loadAll (line 231) | public function loadAll(
method getManyToManyCollection (line 243) | public function getManyToManyCollection(
method loadManyToManyCollection (line 259) | public function loadManyToManyCollection(
method loadOneToManyCollection (line 270) | public function loadOneToManyCollection(
method lock (line 282) | public function lock(array $criteria, LockMode|int $lockMode): void;
method getOneToManyCollection (line 289) | public function getOneToManyCollection(
method exists (line 299) | public function exists(object $entity, Criteria|null $extraConditions ...
FILE: src/Persisters/Entity/JoinedSubclassPersister.php
class JoinedSubclassPersister (line 29) | class JoinedSubclassPersister extends AbstractEntityInheritancePersister
method getDiscriminatorColumnTableName (line 49) | protected function getDiscriminatorColumnTableName(): string
method getVersionedClassMetadata (line 62) | private function getVersionedClassMetadata(): ClassMetadata
method getOwningTable (line 76) | public function getOwningTable(string $fieldName): string
method executeInserts (line 99) | public function executeInserts(): void
method update (line 194) | public function update(object $entity): void
method delete (line 229) | public function delete(object $entity): bool
method getSelectSQL (line 245) | public function getSelectSQL(
method getCountSQL (line 315) | public function getCountSQL(array|Criteria $criteria = []): string
method getLockTablesSql (line 339) | protected function getLockTablesSql(LockMode|int $lockMode): string
method getSelectColumnsSQL (line 365) | protected function getSelectColumnsSQL(): string
method getInsertColumnList (line 463) | protected function getInsertColumnList(): array
method assignDefaultVersionAndUpsertableValues (line 509) | protected function assignDefaultVersionAndUpsertableValues(object $ent...
method fetchVersionAndNotUpsertableValues (line 523) | protected function fetchVersionAndNotUpsertableValues(ClassMetadata $v...
method getJoinSql (line 574) | private function getJoinSql(string $baseTableAlias): string
FILE: src/Persisters/Entity/SingleTablePersister.php
class SingleTablePersister (line 26) | class SingleTablePersister extends AbstractEntityInheritancePersister
method getDiscriminatorColumnTableName (line 30) | protected function getDiscriminatorColumnTableName(): string
method getSelectColumnsSQL (line 35) | protected function getSelectColumnsSQL(): string
method getInsertColumnList (line 100) | protected function getInsertColumnList(): array
method getSQLTableAlias (line 110) | protected function getSQLTableAlias(string $className, string $assocNa...
method getSelectConditionSQL (line 118) | protected function getSelectConditionSQL(array $criteria, AssociationM...
method getSelectConditionCriteriaSQL (line 129) | protected function getSelectConditionCriteriaSQL(Criteria $criteria): ...
method getSelectConditionDiscriminatorValueSQL (line 140) | protected function getSelectConditionDiscriminatorValueSQL(): string
method generateFilterConditionSQL (line 159) | protected function generateFilterConditionSQL(ClassMetadata $targetEnt...
FILE: src/Persisters/Exception/CantUseInOperatorOnCompositeKeys.php
class CantUseInOperatorOnCompositeKeys (line 9) | class CantUseInOperatorOnCompositeKeys extends PersisterException
method create (line 11) | public static function create(): self
FILE: src/Persisters/Exception/InvalidOrientation.php
class InvalidOrientation (line 9) | class InvalidOrientation extends PersisterException
method fromClassNameAndField (line 11) | public static function fromClassNameAndField(string $className, string...
FILE: src/Persisters/Exception/UnrecognizedField.php
class UnrecognizedField (line 11) | final class UnrecognizedField extends PersisterException
method byName (line 14) | public static function byName(string $field): self
method byFullyQualifiedName (line 20) | public static function byFullyQualifiedName(string $className, string ...
FILE: src/Persisters/MatchingAssociationFieldRequiresObject.php
class MatchingAssociationFieldRequiresObject (line 11) | final class MatchingAssociationFieldRequiresObject extends PersisterExce...
method fromClassAndAssociation (line 13) | public static function fromClassAndAssociation(string $class, string $...
FILE: src/Persisters/PersisterException.php
class PersisterException (line 12) | class PersisterException extends Exception implements ORMException
method matchingAssocationFieldRequiresObject (line 14) | public static function matchingAssocationFieldRequiresObject(string $c...
FILE: src/Persisters/SqlExpressionVisitor.php
class SqlExpressionVisitor (line 22) | class SqlExpressionVisitor extends ExpressionVisitor
method __construct (line 24) | public function __construct(
method walkComparison (line 31) | public function walkComparison(Comparison $comparison): string
method walkCompositeExpression (line 56) | public function walkCompositeExpression(CompositeExpression $expr): st...
method walkValue (line 75) | public function walkValue(Value $value): string
FILE: src/Persisters/SqlValueVisitor.php
class SqlValueVisitor (line 15) | class SqlValueVisitor extends ExpressionVisitor
method walkComparison (line 28) | public function walkComparison(Comparison $comparison)
method walkCompositeExpression (line 43) | public function walkCompositeExpression(CompositeExpression $expr)
method walkValue (line 57) | public function walkValue(Value $value)
method getParamsAndTypes (line 68) | public function getParamsAndTypes(): array
method getValueFromComparison (line 77) | protected function getValueFromComparison(Comparison $comparison): mixed
FILE: src/PessimisticLockException.php
class PessimisticLockException (line 10) | class PessimisticLockException extends RuntimeException implements ORMEx...
method lockFailed (line 12) | public static function lockFailed(): self
FILE: src/Proxy/Autoloader.php
class Autoloader (line 24) | final class Autoloader
method resolveFile (line 37) | public static function resolveFile(string $proxyDir, string $proxyName...
method register (line 68) | public static function register(
FILE: src/Proxy/DefaultProxyClassNameResolver.php
class DefaultProxyClassNameResolver (line 20) | final class DefaultProxyClassNameResolver implements ProxyClassNameResolver
method resolveClassName (line 22) | public function resolveClassName(string $className): string
method getClass (line 43) | public static function getClass(object $object): string
FILE: src/Proxy/InternalProxy.php
type InternalProxy (line 15) | interface InternalProxy extends Proxy
method __setInitialized (line 17) | public function __setInitialized(bool $initialized): void;
FILE: src/Proxy/NotAProxyClass.php
class NotAProxyClass (line 12) | final class NotAProxyClass extends InvalidArgumentException implements O...
method __construct (line 14) | public function __construct(string $className, string $proxyNamespace)
FILE: src/Proxy/ProxyFactory.php
class ProxyFactory (line 60) | class ProxyFactory
method __construct (line 150) | public function __construct(
method getProxy (line 210) | public function getProxy(string $className, array $identifier): object
method generateProxyClasses (line 254) | public function generateProxyClasses(array $classes, string|null $prox...
method skipClass (line 278) | protected function skipClass(ClassMetadata $metadata): bool
method createLazyInitializer (line 292) | private function createLazyInitializer(ClassMetadata $classMetadata, E...
method getProxyFileName (line 320) | private function getProxyFileName(string $className, string $baseDirec...
method getProxyFactory (line 328) | private function getProxyFactory(string $className): Closure
method loadProxyClass (line 391) | private function loadProxyClass(ClassMetadata $class): string
method generateProxyClass (line 428) | private function generateProxyClass(ClassMetadata $class, string|null ...
method generateUseLazyGhostTrait (line 471) | private function generateUseLazyGhostTrait(ClassMetadata $class): string
method generateSerializeImpl (line 494) | private function generateSerializeImpl(ClassMetadata $class): string
method generateProxyClassName (line 523) | private static function generateProxyClassName(string $className, stri...
FILE: src/Query.php
class Query (line 46) | class Query extends AbstractQuery
method getSQL (line 176) | public function getSQL(): string|array
method getAST (line 184) | public function getAST(): SelectStatement|UpdateStatement|DeleteStatement
method getResultSetMapping (line 191) | protected function getResultSetMapping(): ResultSetMapping
method parse (line 206) | private function parse(): ParserResult
method _doExecute (line 255) | protected function _doExecute(): Result|int
method evictResultSetCache (line 304) | private function evictResultSetCache(
method evictEntityCacheRegion (line 329) | private function evictEntityCacheRegion(): void
method processParameterMappings (line 354) | private function processParameterMappings(array $paramMappings): array
method resolveParameterValue (line 403) | private function resolveParameterValue(Parameter $parameter): array
method setQueryCache (line 437) | public function setQueryCache(CacheItemPoolInterface|null $queryCache)...
method useQueryCache (line 449) | public function useQueryCache(bool $bool): self
method setQueryCacheLifetime (line 463) | public function setQueryCacheLifetime(int|null $timeToLive): self
method getQueryCacheLifetime (line 473) | public function getQueryCacheLifetime(): int|null
method expireQueryCache (line 483) | public function expireQueryCache(bool $expire = true): self
method getExpireQueryCache (line 493) | public function getExpireQueryCache(): bool
method free (line 498) | public function free(): void
method setDQL (line 509) | public function setDQL(string $dqlQuery): self
method getDQL (line 520) | public function getDQL(): string|null
method getState (line 536) | public function getState(): int
method contains (line 546) | public function contains(string $dql): bool
method setFirstResult (line 558) | public function setFirstResult(int $firstResult): self
method getFirstResult (line 572) | public function getFirstResult(): int
method setMaxResults (line 582) | public function setMaxResults(int|null $maxResults): self
method getMaxResults (line 596) | public function getMaxResults(): int|null
method toIterable (line 602) | public function toIterable(iterable $parameters = [], $hydrationMode =...
method setHint (line 609) | public function setHint(string $name, mixed $value): static
method setHydrationMode (line 616) | public function setHydrationMode(string|int $hydrationMode): static
method setLockMode (line 634) | public function setLockMode(LockMode|int $lockMode): self
method getLockMode (line 653) | public function getLockMode(): LockMode|int|null
method getQueryCacheId (line 667) | protected function getQueryCacheId(): string
method getHash (line 700) | protected function getHash(): string
method __clone (line 708) | public function __clone()
method getSqlExecutor (line 715) | private function getSqlExecutor(): AbstractSqlExecutor
FILE: src/Query/AST/ASTException.php
class ASTException (line 14) | class ASTException extends QueryException
method noDispatchForNode (line 16) | public static function noDispatchForNode(Node $node): self
FILE: src/Query/AST/AggregateExpression.php
class AggregateExpression (line 9) | class AggregateExpression extends Node
method __construct (line 12) | public function __construct(
method dispatch (line 19) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/ArithmeticExpression.php
class ArithmeticExpression (line 14) | class ArithmeticExpression extends Node
method isSimpleArithmeticExpression (line 20) | public function isSimpleArithmeticExpression(): bool
method isSubselect (line 25) | public function isSubselect(): bool
method dispatch (line 30) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/ArithmeticFactor.php
class ArithmeticFactor (line 14) | class ArithmeticFactor extends Node
method __construct (line 16) | public function __construct(
method isPositiveSigned (line 22) | public function isPositiveSigned(): bool
method isNegativeSigned (line 27) | public function isNegativeSigned(): bool
method dispatch (line 32) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/ArithmeticTerm.php
class ArithmeticTerm (line 14) | class ArithmeticTerm extends Node
method __construct (line 17) | public function __construct(public array $arithmeticFactors)
method dispatch (line 21) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/BetweenExpression.php
class BetweenExpression (line 9) | class BetweenExpression extends Node
method __construct (line 11) | public function __construct(
method dispatch (line 19) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/CoalesceExpression.php
class CoalesceExpression (line 14) | class CoalesceExpression extends Node
method __construct (line 17) | public function __construct(public array $scalarExpressions)
method dispatch (line 21) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/CollectionMemberExpression.php
class CollectionMemberExpression (line 14) | class CollectionMemberExpression extends Node
method __construct (line 16) | public function __construct(
method dispatch (line 23) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/ComparisonExpression.php
class ComparisonExpression (line 19) | class ComparisonExpression extends Node
method __construct (line 21) | public function __construct(
method dispatch (line 28) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/ConditionalExpression.php
class ConditionalExpression (line 14) | class ConditionalExpression extends Node
method __construct (line 17) | public function __construct(public array $conditionalTerms)
method dispatch (line 21) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/ConditionalFactor.php
class ConditionalFactor (line 14) | class ConditionalFactor extends Node implements Phase2OptimizableConditi...
method __construct (line 16) | public function __construct(
method dispatch (line 22) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/ConditionalPrimary.php
class ConditionalPrimary (line 14) | class ConditionalPrimary extends Node implements Phase2OptimizableCondit...
method isSimpleConditionalExpression (line 20) | public function isSimpleConditionalExpression(): bool
method isConditionalExpression (line 25) | public function isConditionalExpression(): bool
method dispatch (line 30) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/ConditionalTerm.php
class ConditionalTerm (line 14) | class ConditionalTerm extends Node implements Phase2OptimizableConditional
method __construct (line 17) | public function __construct(public array $conditionalFactors)
method dispatch (line 21) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/DeleteClause.php
class DeleteClause (line 14) | class DeleteClause extends Node
method __construct (line 18) | public function __construct(public string $abstractSchemaName)
method dispatch (line 22) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/DeleteStatement.php
class DeleteStatement (line 14) | class DeleteStatement extends Node
method __construct (line 18) | public function __construct(public DeleteClause $deleteClause)
method dispatch (line 22) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/EmptyCollectionComparisonExpression.php
class EmptyCollectionComparisonExpression (line 14) | class EmptyCollectionComparisonExpression extends Node
method __construct (line 16) | public function __construct(
method dispatch (line 22) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/EntityAsDtoArgumentExpression.php
class EntityAsDtoArgumentExpression (line 14) | class EntityAsDtoArgumentExpression extends Node
method __construct (line 16) | public function __construct(
method dispatch (line 26) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/ExistsExpression.php
class ExistsExpression (line 14) | class ExistsExpression extends Node
method __construct (line 16) | public function __construct(
method dispatch (line 22) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/FromClause.php
class FromClause (line 14) | class FromClause extends Node
method __construct (line 17) | public function __construct(public array $identificationVariableDeclar...
method dispatch (line 21) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/Functions/AbsFunction.php
class AbsFunction (line 17) | class AbsFunction extends FunctionNode
method getSql (line 21) | public function getSql(SqlWalker $sqlWalker): string
method parse (line 28) | public function parse(Parser $parser): void
FILE: src/Query/AST/Functions/AvgFunction.php
class AvgFunction (line 14) | final class AvgFunction extends FunctionNode
method getSql (line 18) | public function getSql(SqlWalker $sqlWalker): string
method parse (line 23) | public function parse(Parser $parser): void
FILE: src/Query/AST/Functions/BitAndFunction.php
class BitAndFunction (line 17) | class BitAndFunction extends FunctionNode
method getSql (line 22) | public function getSql(SqlWalker $sqlWalker): string
method parse (line 32) | public function parse(Parser $parser): void
FILE: src/Query/AST/Functions/BitOrFunction.php
class BitOrFunction (line 17) | class BitOrFunction extends FunctionNode
method getSql (line 22) | public function getSql(SqlWalker $sqlWalker): string
method parse (line 32) | public function parse(Parser $parser): void
FILE: src/Query/AST/Functions/ConcatFunction.php
class ConcatFunction (line 17) | class ConcatFunction extends FunctionNode
method getSql (line 25) | public function getSql(SqlWalker $sqlWalker): string
method parse (line 38) | public function parse(Parser $parser): void
FILE: src/Query/AST/Functions/CountFunction.php
class CountFunction (line 17) | final class CountFunction extends FunctionNode implements TypedExpression
method getSql (line 21) | public function getSql(SqlWalker $sqlWalker): string
method parse (line 26) | public function parse(Parser $parser): void
method getReturnType (line 31) | public function getReturnType(): Type
FILE: src/Query/AST/Functions/CurrentDateFunction.php
class CurrentDateFunction (line 16) | class CurrentDateFunction extends FunctionNode
method getSql (line 18) | public function getSql(SqlWalker $sqlWalker): string
method parse (line 23) | public function parse(Parser $parser): void
FILE: src/Query/AST/Functions/CurrentTimeFunction.php
class CurrentTimeFunction (line 16) | class CurrentTimeFunction extends FunctionNode
method getSql (line 18) | public function getSql(SqlWalker $sqlWalker): string
method parse (line 23) | public function parse(Parser $parser): void
FILE: src/Query/AST/Functions/CurrentTimestampFunction.php
class CurrentTimestampFunction (line 16) | class CurrentTimestampFunction extends FunctionNode
method getSql (line 18) | public function getSql(SqlWalker $sqlWalker): string
method parse (line 23) | public function parse(Parser $parser): void
FILE: src/Query/AST/Functions/DateAddFunction.php
class DateAddFunction (line 21) | class DateAddFunction extends FunctionNode
method getSql (line 27) | public function getSql(SqlWalker $sqlWalker): string
method dispatchIntervalExpression (line 65) | private function dispatchIntervalExpression(SqlWalker $sqlWalker): string
method parse (line 70) | public function parse(Parser $parser): void
FILE: src/Query/AST/Functions/DateDiffFunction.php
class DateDiffFunction (line 17) | class DateDiffFunction extends FunctionNode
method getSql (line 22) | public function getSql(SqlWalker $sqlWalker): string
method parse (line 30) | public function parse(Parser $parser): void
FILE: src/Query/AST/Functions/DateSubFunction.php
class DateSubFunction (line 18) | class DateSubFunction extends DateAddFunction
method getSql (line 20) | public function getSql(SqlWalker $sqlWalker): string
method dispatchIntervalExpression (line 58) | private function dispatchIntervalExpression(SqlWalker $sqlWalker): string
FILE: src/Query/AST/Functions/FunctionNode.php
class FunctionNode (line 18) | abstract class FunctionNode extends Node
method __construct (line 20) | public function __construct(public string $name)
method getSql (line 24) | abstract public function getSql(SqlWalker $sqlWalker): string;
method dispatch (line 26) | public function dispatch(SqlWalker $sqlWalker): string
method parse (line 31) | abstract public function parse(Parser $parser): void;
FILE: src/Query/AST/Functions/IdentityFunction.php
class IdentityFunction (line 22) | class IdentityFunction extends FunctionNode
method getSql (line 28) | public function getSql(SqlWalker $sqlWalker): string
method parse (line 72) | public function parse(Parser $parser): void
FILE: src/Query/AST/Functions/LengthFunction.php
class LengthFunction (line 20) | class LengthFunction extends FunctionNode implements TypedExpression
method getSql (line 24) | public function getSql(SqlWalker $sqlWalker): string
method parse (line 31) | public function parse(Parser $parser): void
method getReturnType (line 41) | public function getReturnType(): Type
FILE: src/Query/AST/Functions/LocateFunction.php
class LocateFunction (line 17) | class LocateFunction extends FunctionNode
method getSql (line 24) | public function getSql(SqlWalker $sqlWalker): string
method parse (line 42) | public function parse(Parser $parser): void
FILE: src/Query/AST/Functions/LowerFunction.php
class LowerFunction (line 19) | class LowerFunction extends FunctionNode
method getSql (line 23) | public function getSql(SqlWalker $sqlWalker): string
method parse (line 31) | public function parse(Parser $parser): void
FILE: src/Query/AST/Functions/MaxFunction.php
class MaxFunction (line 14) | final class MaxFunction extends FunctionNode
method getSql (line 18) | public function getSql(SqlWalker $sqlWalker): string
method parse (line 23) | public function parse(Parser $parser): void
FILE: src/Query/AST/Functions/MinFunction.php
class MinFunction (line 14) | final class MinFunction extends FunctionNode
method getSql (line 18) | public function getSql(SqlWalker $sqlWalker): string
method parse (line 23) | public function parse(Parser $parser): void
FILE: src/Query/AST/Functions/ModFunction.php
class ModFunction (line 17) | class ModFunction extends FunctionNode
method getSql (line 22) | public function getSql(SqlWalker $sqlWalker): string
method parse (line 30) | public function parse(Parser $parser): void
FILE: src/Query/AST/Functions/SizeFunction.php
class SizeFunction (line 19) | class SizeFunction extends FunctionNode
method getSql (line 27) | public function getSql(SqlWalker $sqlWalker): string
method parse (line 104) | public function parse(Parser $parser): void
FILE: src/Query/AST/Functions/SqrtFunction.php
class SqrtFunction (line 19) | class SqrtFunction extends FunctionNode
method getSql (line 23) | public function getSql(SqlWalker $sqlWalker): string
method parse (line 31) | public function parse(Parser $parser): void
FILE: src/Query/AST/Functions/SubstringFunction.php
class SubstringFunction (line 17) | class SubstringFunction extends FunctionNode
method getSql (line 24) | public function getSql(SqlWalker $sqlWalker): string
method parse (line 38) | public function parse(Parser $parser): void
FILE: src/Query/AST/Functions/SumFunction.php
class SumFunction (line 14) | final class SumFunction extends FunctionNode
method getSql (line 18) | public function getSql(SqlWalker $sqlWalker): string
method parse (line 23) | public function parse(Parser $parser): void
FILE: src/Query/AST/Functions/TrimFunction.php
class TrimFunction (line 21) | class TrimFunction extends FunctionNode
method getSql (line 29) | public function getSql(SqlWalker $sqlWalker): string
method parse (line 46) | public function parse(Parser $parser): void
method getTrimMode (line 72) | private function getTrimMode(): TrimMode|int
method parseTrimMode (line 89) | private function parseTrimMode(Parser $parser): void
FILE: src/Query/AST/Functions/UpperFunction.php
class UpperFunction (line 19) | class UpperFunction extends FunctionNode
method getSql (line 23) | public function getSql(SqlWalker $sqlWalker): string
method parse (line 31) | public function parse(Parser $parser): void
FILE: src/Query/AST/GeneralCaseExpression.php
class GeneralCaseExpression (line 14) | class GeneralCaseExpression extends Node
method __construct (line 17) | public function __construct(
method dispatch (line 23) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/GroupByClause.php
class GroupByClause (line 9) | class GroupByClause extends Node
method __construct (line 12) | public function __construct(public array $groupByItems)
method dispatch (line 16) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/HavingClause.php
class HavingClause (line 9) | class HavingClause extends Node
method __construct (line 11) | public function __construct(public ConditionalExpression|Phase2Optimiz...
method dispatch (line 15) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/IdentificationVariableDeclaration.php
class IdentificationVariableDeclaration (line 14) | class IdentificationVariableDeclaration extends Node
method __construct (line 17) | public function __construct(
method dispatch (line 24) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/InListExpression.php
class InListExpression (line 9) | class InListExpression extends Node
method __construct (line 12) | public function __construct(
method dispatch (line 19) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/InSubselectExpression.php
class InSubselectExpression (line 9) | class InSubselectExpression extends Node
method __construct (line 11) | public function __construct(
method dispatch (line 18) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/IndexBy.php
class IndexBy (line 14) | class IndexBy extends Node
method __construct (line 16) | public function __construct(public PathExpression $singleValuedPathExp...
method dispatch (line 20) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/InputParameter.php
class InputParameter (line 14) | class InputParameter extends Node
method __construct (line 20) | public function __construct(string $value)
method dispatch (line 31) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/InstanceOfExpression.php
class InstanceOfExpression (line 15) | class InstanceOfExpression extends Node
method __construct (line 18) | public function __construct(
method dispatch (line 25) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/Join.php
class Join (line 15) | class Join extends Node
method __construct (line 24) | public function __construct(
method dispatch (line 30) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/JoinAssociationDeclaration.php
class JoinAssociationDeclaration (line 14) | class JoinAssociationDeclaration extends Node
method __construct (line 16) | public function __construct(
method dispatch (line 23) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/JoinAssociationPathExpression.php
class JoinAssociationPathExpression (line 12) | class JoinAssociationPathExpression extends Node
method __construct (line 14) | public function __construct(
FILE: src/Query/AST/JoinClassPathExpression.php
class JoinClassPathExpression (line 14) | class JoinClassPathExpression extends Node
method __construct (line 16) | public function __construct(
method dispatch (line 22) | public function dispatch(SqlWalker $walker): string
FILE: src/Query/AST/JoinVariableDeclaration.php
class JoinVariableDeclaration (line 14) | class JoinVariableDeclaration extends Node
method __construct (line 16) | public function __construct(public Join $join, public IndexBy|null $in...
method dispatch (line 20) | public function dispatch(SqlWalker $walker
Condensed preview — 1645 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (6,980K chars).
[
{
"path": ".doctrine-project.json",
"chars": 1521,
"preview": "{\n \"active\": true,\n \"name\": \"Object Relational Mapper\",\n \"shortName\": \"ORM\",\n \"slug\": \"orm\",\n \"docsSlug\":"
},
{
"path": ".gitattributes",
"chars": 572,
"preview": "/.github export-ignore\n/ci export-ignore\n/docs export-ignore\n/tests export-ignore\n/tools export-ignore\n.doctrine-project"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE/Failing_Test.md",
"chars": 350,
"preview": "---\nname: 🐞 Failing Test\nabout: You found a bug and have a failing Unit or Functional test? 🔨\n---\n\n### Failing Test\n\n<!-"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE/Improvement.md",
"chars": 372,
"preview": "---\nname: ⚙ Improvement\nabout: You have some improvement to make Doctrine better? 🎁\n---\n\n### Improvement\n\n<!-- Fill in t"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE/New_Feature.md",
"chars": 712,
"preview": "---\nname: 🎉 New Feature\nabout: You have implemented some neat idea that you want to make part of Doctrine? 🎩\n---\n\n<!--\nT"
},
{
"path": ".github/dependabot.yml",
"chars": 171,
"preview": "version: 2\nupdates:\n - package-ecosystem: \"github-actions\"\n directory: \"/\"\n schedule:\n interval: \"weekly\"\n "
},
{
"path": ".github/workflows/coding-standards.yml",
"chars": 506,
"preview": "name: \"Coding Standards\"\n\non:\n pull_request:\n branches:\n - \"*.x\"\n paths:\n - .github/workflows/coding-st"
},
{
"path": ".github/workflows/composer-lint.yml",
"chars": 391,
"preview": "name: \"Composer Lint\"\n\non:\n pull_request:\n branches:\n - \"*.x\"\n paths:\n - \".github/workflows/composer-li"
},
{
"path": ".github/workflows/continuous-integration.yml",
"chars": 14230,
"preview": "name: \"CI: PHPUnit\"\n\non:\n pull_request:\n branches:\n - \"*.x\"\n paths:\n - .github/workflows/continuous-int"
},
{
"path": ".github/workflows/documentation.yml",
"chars": 379,
"preview": "name: \"Documentation\"\n\non:\n pull_request:\n branches:\n - \"*.x\"\n paths:\n - \".github/workflows/documentati"
},
{
"path": ".github/workflows/phpbench.yml",
"chars": 1038,
"preview": "\nname: \"Performance benchmark\"\n\non:\n pull_request:\n branches:\n - \"*.x\"\n paths:\n - .github/workflows/php"
},
{
"path": ".github/workflows/release-on-milestone-closed.yml",
"chars": 432,
"preview": "name: \"Automatic Releases\"\n\non:\n milestone:\n types:\n - \"closed\"\n\njobs:\n release:\n uses: \"doctrine/.github/."
},
{
"path": ".github/workflows/stale.yml",
"chars": 701,
"preview": "name: 'Close stale pull requests'\non:\n schedule:\n - cron: '0 3 * * *'\n\njobs:\n stale:\n runs-on: ubuntu-latest\n "
},
{
"path": ".github/workflows/static-analysis.yml",
"chars": 1333,
"preview": "name: \"Static Analysis\"\n\non:\n pull_request:\n branches:\n - \"*.x\"\n paths:\n - .github/workflows/static-ana"
},
{
"path": ".github/workflows/website-schema.yml",
"chars": 431,
"preview": "\nname: \"Website config validation\"\n\non:\n pull_request:\n branches:\n - \"*.x\"\n paths:\n - \".doctrine-projec"
},
{
"path": ".gitignore",
"chars": 209,
"preview": "build/\nlogs/\nreports/\ndist/\ndownload/\n/.settings/\n.buildpath\n.project\n.idea\n*.iml\nvendor/\n/tests/Doctrine/Performance/hi"
},
{
"path": "CONTRIBUTING.md",
"chars": 2519,
"preview": "# Contribute to Doctrine\n\nThank you for contributing to Doctrine!\n\nBefore we can merge your Pull-Request here are some g"
},
{
"path": "LICENSE",
"chars": 1055,
"preview": "Copyright (c) Doctrine Project\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis sof"
},
{
"path": "README.md",
"chars": 4021,
"preview": "| [4.0.x][4.0] | [3.7.x][3.7] | "
},
{
"path": "SECURITY.md",
"chars": 785,
"preview": "Security\n========\n\nThe Doctrine library is operating very close to your database and as such needs\nto handle and make as"
},
{
"path": "UPGRADE.md",
"chars": 107895,
"preview": "Note about upgrading: Doctrine uses static and runtime mechanisms to raise\nawareness about deprecated code.\n\n- Use of `@"
},
{
"path": "ci/github/phpunit/mysqli.xml",
"chars": 1762,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:noNam"
},
{
"path": "ci/github/phpunit/pdo_mysql.xml",
"chars": 1765,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:noNam"
},
{
"path": "ci/github/phpunit/pdo_pgsql.xml",
"chars": 1554,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:noNam"
},
{
"path": "ci/github/phpunit/pdo_sqlite.xml",
"chars": 1445,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:noNam"
},
{
"path": "ci/github/phpunit/pgsql.xml",
"chars": 1550,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:noNam"
},
{
"path": "ci/github/phpunit/sqlite3.xml",
"chars": 1442,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:noNam"
},
{
"path": "composer.json",
"chars": 2712,
"preview": "{\n \"name\": \"doctrine/orm\",\n \"description\": \"Object-Relational-Mapper for PHP\",\n \"license\": \"MIT\",\n \"type\": \""
},
{
"path": "docs/.gitignore",
"chars": 30,
"preview": "composer.lock\nvendor/\noutput/\n"
},
{
"path": "docs/LICENSE.md",
"chars": 22435,
"preview": "The Doctrine ORM documentation is licensed under [CC BY-NC-SA 3.0](https://creativecommons.org/licenses/by-nc-sa/3.0/dee"
},
{
"path": "docs/README.md",
"chars": 458,
"preview": "# Doctrine ORM Documentation\n\nThe documentation is written in [ReStructured Text](https://docutils.sourceforge.io/rst.ht"
},
{
"path": "docs/composer.json",
"chars": 220,
"preview": "{\n \"name\": \"doctrine/orm-docs\",\n \"description\": \"Documentation for the Object-Relational Mapper\\\"\",\n \"type\": \"l"
},
{
"path": "docs/en/cookbook/advanced-field-value-conversion-using-custom-mapping-types.rst",
"chars": 6556,
"preview": "Advanced field value conversion using custom mapping types\n==========================================================\n\n."
},
{
"path": "docs/en/cookbook/aggregate-fields.rst",
"chars": 11220,
"preview": "Aggregate Fields\n================\n\n.. sectionauthor:: Benjamin Eberlei <kontakt@beberlei.de>\n\nYou will often come across"
},
{
"path": "docs/en/cookbook/custom-mapping-types.rst",
"chars": 3117,
"preview": "Custom Mapping Types\n====================\n\nDoctrine allows you to create new mapping types. This can come in\nhandy when "
},
{
"path": "docs/en/cookbook/decorator-pattern.rst",
"chars": 6247,
"preview": "Persisting the Decorator Pattern\n================================\n\n.. sectionauthor:: Chris Woodford <chris.woodford@gma"
},
{
"path": "docs/en/cookbook/dql-custom-walkers/InterpolateParametersSQLOutputWalker.php",
"chars": 2041,
"preview": "<?php\nuse Doctrine\\DBAL\\ArrayParameterType;\nuse Doctrine\\DBAL\\ParameterType;\nuse Doctrine\\DBAL\\Types\\BooleanType;\nuse Do"
},
{
"path": "docs/en/cookbook/dql-custom-walkers.rst",
"chars": 10092,
"preview": "Extending DQL in Doctrine ORM: Custom AST Walkers\n===============================================\n\n.. sectionauthor:: Be"
},
{
"path": "docs/en/cookbook/dql-user-defined-functions.rst",
"chars": 10331,
"preview": "DQL User Defined Functions\n==========================\n\n.. sectionauthor:: Benjamin Eberlei <kontakt@beberlei.de>\n\nBy def"
},
{
"path": "docs/en/cookbook/entities-in-session.rst",
"chars": 2936,
"preview": "Entities in the Session\n=======================\n\nThere are several use-cases to save entities in the session, for exampl"
},
{
"path": "docs/en/cookbook/generated-columns/Article.php",
"chars": 747,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nuse Doctrine\\ORM\\Mapping as ORM;\n\n#[ORM\\Entity]\nclass Article\n{\n #[ORM\\Id]\n #[ORM"
},
{
"path": "docs/en/cookbook/generated-columns/Person.php",
"chars": 512,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nuse Doctrine\\ORM\\Mapping as ORM;\n\n#[ORM\\Entity]\nclass Person\n{\n #[ORM\\Column(type: '"
},
{
"path": "docs/en/cookbook/generated-columns.rst",
"chars": 1894,
"preview": "Generated Columns\n=================\n\nGenerated columns, sometimes also called virtual columns, are populated by\nthe data"
},
{
"path": "docs/en/cookbook/implementing-arrayaccess-for-domain-objects.rst",
"chars": 3136,
"preview": "Implementing ArrayAccess for Domain Objects\n===========================================\n\n.. sectionauthor:: Roman Borsch"
},
{
"path": "docs/en/cookbook/mysql-enums.rst",
"chars": 5787,
"preview": "Mysql Enums\n===========\n\nThe type system of Doctrine ORM consists of flyweights, which means there is only\none instance "
},
{
"path": "docs/en/cookbook/resolve-target-entity-listener.rst",
"chars": 4441,
"preview": "Keeping your Modules independent\n=================================\n\nOne of the goals of using modules is to create discr"
},
{
"path": "docs/en/cookbook/sql-table-prefixes.rst",
"chars": 2832,
"preview": "SQL-Table Prefixes\n==================\n\nThis recipe is intended as an example of implementing a\nloadClassMetadata listene"
},
{
"path": "docs/en/cookbook/strategy-cookbook-introduction.rst",
"chars": 8735,
"preview": "Strategy-Pattern\n================\n\nThis recipe will give you a short introduction on how to design\nsimilar entities with"
},
{
"path": "docs/en/cookbook/validation-of-entities.rst",
"chars": 4374,
"preview": "Validation of Entities\n======================\n\n.. sectionauthor:: Benjamin Eberlei <kontakt@beberlei.de>\n\nDoctrine ORM d"
},
{
"path": "docs/en/cookbook/working-with-datetime.rst",
"chars": 6714,
"preview": "Working with DateTime Instances\n===============================\n\nThere are many nitty gritty details when working with P"
},
{
"path": "docs/en/index.rst",
"chars": 4719,
"preview": "Welcome to Doctrine ORM's documentation!\n==========================================\n\nThe Doctrine documentation is compr"
},
{
"path": "docs/en/reference/advanced-configuration.rst",
"chars": 19197,
"preview": "Advanced Configuration\n======================\n\nThe configuration of the EntityManager requires a\n``Doctrine\\ORM\\Configur"
},
{
"path": "docs/en/reference/architecture.rst",
"chars": 8247,
"preview": "Architecture\n============\n\nThis chapter gives an overview of the overall architecture,\nterminology and constraints of Do"
},
{
"path": "docs/en/reference/association-mapping.rst",
"chars": 30629,
"preview": "Association Mapping\n===================\n\nThis chapter explains mapping associations between objects.\n\nInstead of working"
},
{
"path": "docs/en/reference/attributes-reference.rst",
"chars": 34450,
"preview": "Attributes Reference\n====================\n\nPHP 8 adds native support for metadata with its \"Attributes\" feature.\nDoctrin"
},
{
"path": "docs/en/reference/basic-mapping/DefaultValues.php",
"chars": 439,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Entity;\n\nuse DateTime;\nuse Doctrine\\DBAL\\Schema\\DefaultExpression\\Current"
},
{
"path": "docs/en/reference/basic-mapping/default-values.xml",
"chars": 448,
"preview": "<doctrine-mapping>\n <entity name=\"Message\">\n <field name=\"text\">\n <options>\n <option name=\"default\">Hell"
},
{
"path": "docs/en/reference/basic-mapping.rst",
"chars": 20212,
"preview": "Basic Mapping\n=============\n\nThis guide explains the basic mapping of entities and properties.\nAfter working through thi"
},
{
"path": "docs/en/reference/batch-processing.rst",
"chars": 5957,
"preview": "Batch Processing\n================\n\nThis chapter shows you how to accomplish bulk inserts, updates and\ndeletes with Doctr"
},
{
"path": "docs/en/reference/best-practices.rst",
"chars": 3793,
"preview": "Best Practices\n==============\n\nThe best practices mentioned here that affect database\ndesign generally refer to best pra"
},
{
"path": "docs/en/reference/caching.rst",
"chars": 5972,
"preview": "Caching\n=======\n\nThe Doctrine ORM package can leverage cache adapters implementing the PSR-6\nstandard to allow you to im"
},
{
"path": "docs/en/reference/change-tracking-policies.rst",
"chars": 2209,
"preview": "Change Tracking Policies\n========================\n\nChange tracking is the process of determining what has changed in\nman"
},
{
"path": "docs/en/reference/configuration.rst",
"chars": 3479,
"preview": "Installation and Configuration\n==============================\n\nDoctrine can be installed with `Composer <https://getcomp"
},
{
"path": "docs/en/reference/dql-doctrine-query-language.rst",
"chars": 66774,
"preview": "Doctrine Query Language\n=======================\n\nDQL stands for Doctrine Query Language and is an Object\nQuery Language "
},
{
"path": "docs/en/reference/events.rst",
"chars": 38696,
"preview": "Events\n======\n\nDoctrine ORM features a lightweight event system that is part of the\nCommon package. Doctrine uses it to "
},
{
"path": "docs/en/reference/faq.rst",
"chars": 9483,
"preview": "Frequently Asked Questions\n==========================\n\n.. note::\n\n This FAQ is a work in progress. We will add lots o"
},
{
"path": "docs/en/reference/filters.rst",
"chars": 5116,
"preview": "Filters\n=======\n\nDoctrine ORM features a filter system that allows the developer to add SQL to\nthe conditional clauses o"
},
{
"path": "docs/en/reference/improving-performance.rst",
"chars": 3312,
"preview": "Improving Performance\n=====================\n\nBytecode Cache\n--------------\n\nIt is highly recommended to make use of a by"
},
{
"path": "docs/en/reference/inheritance-mapping.rst",
"chars": 21576,
"preview": "Inheritance Mapping\n===================\n\nThis chapter explains the available options for mapping class\nhierarchies.\n\nMap"
},
{
"path": "docs/en/reference/installation.rst",
"chars": 141,
"preview": ":orphan:\n\nInstallation\n============\n\nThe installation chapter has moved to :doc:`Installation and Configuration </refere"
},
{
"path": "docs/en/reference/limitations-and-known-issues.rst",
"chars": 9846,
"preview": "Limitations and Known Issues\n============================\n\nWe try to make using Doctrine ORM a very pleasant experience."
},
{
"path": "docs/en/reference/metadata-drivers.rst",
"chars": 5842,
"preview": "Metadata Drivers\n================\n\nThe heart of an object relational mapper is the mapping information\nthat glues everyt"
},
{
"path": "docs/en/reference/namingstrategy.rst",
"chars": 4565,
"preview": "Implementing a NamingStrategy\n==============================\n\nUsing a naming strategy you can provide rules for generati"
},
{
"path": "docs/en/reference/native-sql.rst",
"chars": 17893,
"preview": "Native SQL\n==========\n\nWith ``NativeQuery`` you can execute native SELECT SQL statements\nand map the results to Doctrine"
},
{
"path": "docs/en/reference/partial-hydration.rst",
"chars": 633,
"preview": "Partial Hydration\n=================\n\nPartial hydration of entities is allowed in the array hydrator, when\nonly a subset "
},
{
"path": "docs/en/reference/partial-objects.rst",
"chars": 3600,
"preview": "Partial Objects\n===============\n\nA partial object is an object whose state is not fully initialized\nafter being reconsti"
},
{
"path": "docs/en/reference/php-mapping.rst",
"chars": 7168,
"preview": "PHP Mapping\n===========\n\nDoctrine ORM also allows you to provide the ORM metadata in the form of plain\nPHP code using th"
},
{
"path": "docs/en/reference/query-builder.rst",
"chars": 22752,
"preview": "The QueryBuilder\n================\n\nA ``QueryBuilder`` provides an API that is designed for\nconditionally constructing a "
},
{
"path": "docs/en/reference/second-level-cache.rst",
"chars": 23157,
"preview": "The Second Level Cache\n======================\n\n.. note::\n\n The second level cache functionality is marked as experime"
},
{
"path": "docs/en/reference/security.rst",
"chars": 4800,
"preview": "Security\n========\n\nThe Doctrine library is operating very close to your database and as such needs\nto handle and make as"
},
{
"path": "docs/en/reference/tools.rst",
"chars": 10065,
"preview": "Tools\n=====\n\nDoctrine Console\n----------------\n\nThe Doctrine Console is a Command Line Interface tool for simplifying co"
},
{
"path": "docs/en/reference/transactions-and-concurrency.rst",
"chars": 14151,
"preview": "Transactions and Concurrency\n============================\n\n.. _transactions-and-concurrency_transaction-demarcation:\n\nTr"
},
{
"path": "docs/en/reference/typedfieldmapper.rst",
"chars": 5221,
"preview": "Implementing a TypedFieldMapper\n===============================\n\n.. versionadded:: 2.14\n\nYou can specify custom typed fi"
},
{
"path": "docs/en/reference/unitofwork-associations.rst",
"chars": 2808,
"preview": "Association Updates: Owning Side and Inverse Side\n=================================================\n\nWhen mapping bidire"
},
{
"path": "docs/en/reference/unitofwork.rst",
"chars": 6848,
"preview": "Doctrine Internals explained\n============================\n\nObject relational mapping is a complex topic and sufficiently"
},
{
"path": "docs/en/reference/working-with-associations.rst",
"chars": 25613,
"preview": "Working with Associations\n=========================\n\nAssociations between entities are represented just like in regular\n"
},
{
"path": "docs/en/reference/working-with-objects.rst",
"chars": 30992,
"preview": "Working with Objects\n====================\n\nIn this chapter we will help you understand the ``EntityManager``\nand the ``U"
},
{
"path": "docs/en/reference/xml-mapping.rst",
"chars": 28058,
"preview": "XML Mapping\n===========\n\nThe XML mapping driver enables you to provide the ORM metadata in\nform of XML documents. It req"
},
{
"path": "docs/en/sidebar.rst",
"chars": 2048,
"preview": ":orphan:\n\n.. toctree::\n :caption: Tutorials\n :depth: 3\n\n tutorials/getting-started\n tutorials/working-with-index"
},
{
"path": "docs/en/tutorials/composite-primary-keys.rst",
"chars": 9795,
"preview": "Composite and Foreign Keys as Primary Key\n=========================================\n\nDoctrine ORM supports composite pri"
},
{
"path": "docs/en/tutorials/embeddables.rst",
"chars": 3898,
"preview": "Separating Concerns using Embeddables\n=====================================\n\nEmbeddables are classes which are not entit"
},
{
"path": "docs/en/tutorials/extra-lazy-associations.rst",
"chars": 3530,
"preview": "Extra Lazy Associations\n=======================\n\n.. versionadded:: 2.1\n\nIn many cases associations between entities can "
},
{
"path": "docs/en/tutorials/getting-started.rst",
"chars": 55280,
"preview": "Getting Started with Doctrine\n=============================\n\nThis guide covers getting started with the Doctrine ORM. Af"
},
{
"path": "docs/en/tutorials/ordered-associations.rst",
"chars": 2746,
"preview": "Ordering To-Many Associations\n-----------------------------\n\nThere are use-cases when you'll want to sort collections wh"
},
{
"path": "docs/en/tutorials/override-field-association-mappings-in-subclasses.rst",
"chars": 2470,
"preview": "Override Field Association Mappings In Subclasses\n-------------------------------------------------\n\nSometimes there is "
},
{
"path": "docs/en/tutorials/pagination.rst",
"chars": 2338,
"preview": "Pagination\n==========\n\nDoctrine ORM ships with a Paginator for DQL queries. It\nhas a very simple API and implements the "
},
{
"path": "docs/en/tutorials/working-with-indexed-associations/Market.php",
"chars": 1574,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\Tests\\Models\\StockExchange;\n\nuse Doctrine\\Common\\Collections\\ArrayCo"
},
{
"path": "docs/en/tutorials/working-with-indexed-associations/market.xml",
"chars": 638,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<doctrine-mapping xmlns=\"http://doctrine-project.org/schemas/orm/doctrine-mapping"
},
{
"path": "docs/en/tutorials/working-with-indexed-associations.rst",
"chars": 6563,
"preview": "Working with Indexed Associations\n=================================\n\nDoctrine ORM collections are modelled after PHPs na"
},
{
"path": "doctrine-mapping.xsd",
"chars": 27160,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"\n targetNamespace=\"http"
},
{
"path": "phpbench.json",
"chars": 225,
"preview": "{\n \"runner.bootstrap\": \"tests/Tests/TestInit.php\",\n \"runner.path\": \"tests/Performance\",\n \"runner.file_pattern\":"
},
{
"path": "phpcs.xml.dist",
"chars": 14597,
"preview": "<?xml version=\"1.0\"?>\n<ruleset xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n name=\"PHP_CodeSniffer\"\n "
},
{
"path": "phpstan-baseline.neon",
"chars": 186348,
"preview": "parameters:\n\tignoreErrors:\n\t\t-\n\t\t\tmessage: '#^Method Doctrine\\\\ORM\\\\AbstractQuery\\:\\:getParameter\\(\\) should return Doct"
},
{
"path": "phpstan-dbal3.neon",
"chars": 5822,
"preview": "includes:\n - phpstan-baseline.neon\n - phpstan-params.neon\n\nparameters:\n reportUnmatchedIgnoredErrors: false # S"
},
{
"path": "phpstan-params.neon",
"chars": 264,
"preview": "parameters:\n level: 7\n paths:\n - src\n - tests/StaticAnalysis\n excludePaths:\n - src/Mapping"
},
{
"path": "phpstan.neon",
"chars": 2793,
"preview": "includes:\n - phpstan-baseline.neon\n - phpstan-params.neon\n\nparameters:\n ignoreErrors:\n # Symfony cache s"
},
{
"path": "phpunit.xml.dist",
"chars": 3502,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Use this configuration file as a template to run the tests against any d"
},
{
"path": "src/AbstractQuery.php",
"chars": 32081,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM;\n\nuse BackedEnum;\nuse Doctrine\\Common\\Collections\\ArrayCollectio"
},
{
"path": "src/Cache/AssociationCacheEntry.php",
"chars": 764,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nclass AssociationCacheEntry implements CacheEntry\n{\n "
},
{
"path": "src/Cache/CacheConfiguration.php",
"chars": 1526,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\ORM\\Cache\\Logging\\CacheLogger;\n\n/**\n * Conf"
},
{
"path": "src/Cache/CacheEntry.php",
"chars": 236,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\n/**\n * Cache entry interface\n *\n * <b>IMPORTANT NOTE:</b"
},
{
"path": "src/Cache/CacheException.php",
"chars": 669,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\ORM\\Exception\\ORMException;\nuse LogicExcept"
},
{
"path": "src/Cache/CacheFactory.php",
"chars": 1993,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\ORM\\Cache;\nuse Doctrine\\ORM\\Cache\\Persister"
},
{
"path": "src/Cache/CacheKey.php",
"chars": 315,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\n/**\n * Defines entity / collection / query key to be sto"
},
{
"path": "src/Cache/CollectionCacheEntry.php",
"chars": 654,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nclass CollectionCacheEntry implements CacheEntry\n{\n /"
},
{
"path": "src/Cache/CollectionCacheKey.php",
"chars": 1108,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse function implode;\nuse function ksort;\nuse function s"
},
{
"path": "src/Cache/CollectionHydrator.php",
"chars": 667,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\Common\\Collections\\Collection;\nuse Doctrine"
},
{
"path": "src/Cache/ConcurrentRegion.php",
"chars": 1200,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\n/**\n * Defines contract for concurrently managed data re"
},
{
"path": "src/Cache/DefaultCache.php",
"chars": 7894,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\ORM\\Cache;\nuse Doctrine\\ORM\\Cache\\Persister"
},
{
"path": "src/Cache/DefaultCacheFactory.php",
"chars": 7180,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\ORM\\Cache;\nuse Doctrine\\ORM\\Cache\\Persister"
},
{
"path": "src/Cache/DefaultCollectionHydrator.php",
"chars": 2266,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\Common\\Collections\\Collection;\nuse Doctrine"
},
{
"path": "src/Cache/DefaultEntityHydrator.php",
"chars": 6542,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\OR"
},
{
"path": "src/Cache/DefaultQueryCache.php",
"chars": 14973,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\Common\\Collections\\ArrayCollection;\nuse Doc"
},
{
"path": "src/Cache/EntityCacheEntry.php",
"chars": 1273,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\n\nuse function a"
},
{
"path": "src/Cache/EntityCacheKey.php",
"chars": 929,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse function implode;\nuse function ksort;\nuse function s"
},
{
"path": "src/Cache/EntityHydrator.php",
"chars": 958,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\ORM\\Mapping\\ClassMetadata;\n\n/**\n * Hydrator"
},
{
"path": "src/Cache/Exception/CacheException.php",
"chars": 220,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Exception;\n\nuse Doctrine\\ORM\\Cache\\CacheException as BaseC"
},
{
"path": "src/Cache/Exception/CannotUpdateReadOnlyCollection.php",
"chars": 421,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Exception;\n\nuse function sprintf;\n\nclass CannotUpdateReadO"
},
{
"path": "src/Cache/Exception/CannotUpdateReadOnlyEntity.php",
"chars": 320,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Exception;\n\nuse function sprintf;\n\nclass CannotUpdateReadO"
},
{
"path": "src/Cache/Exception/FeatureNotImplemented.php",
"chars": 727,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Exception;\n\nclass FeatureNotImplemented extends CacheExcep"
},
{
"path": "src/Cache/Exception/NonCacheableEntity.php",
"chars": 372,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Exception;\n\nuse function sprintf;\n\nclass NonCacheableEntit"
},
{
"path": "src/Cache/Exception/NonCacheableEntityAssociation.php",
"chars": 447,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Exception;\n\nuse function sprintf;\n\nclass NonCacheableEntit"
},
{
"path": "src/Cache/Lock.php",
"chars": 409,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse function time;\nuse function uniqid;\n\nclass Lock\n{\n "
},
{
"path": "src/Cache/LockException.php",
"chars": 198,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\ORM\\Cache\\Exception\\CacheException;\n\n/**\n *"
},
{
"path": "src/Cache/Logging/CacheLogger.php",
"chars": 1719,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Logging;\n\nuse Doctrine\\ORM\\Cache\\CollectionCacheKey;\nuse D"
},
{
"path": "src/Cache/Logging/CacheLoggerChain.php",
"chars": 2591,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Logging;\n\nuse Doctrine\\ORM\\Cache\\CollectionCacheKey;\nuse D"
},
{
"path": "src/Cache/Logging/StatisticsCacheLogger.php",
"chars": 4775,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Logging;\n\nuse Doctrine\\ORM\\Cache\\CollectionCacheKey;\nuse D"
},
{
"path": "src/Cache/Persister/CachedPersister.php",
"chars": 580,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Persister;\n\nuse Doctrine\\ORM\\Cache\\Region;\n\n/**\n * Interfa"
},
{
"path": "src/Cache/Persister/Collection/AbstractCollectionPersister.php",
"chars": 6139,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Persister\\Collection;\n\nuse Doctrine\\Common\\Collections\\Col"
},
{
"path": "src/Cache/Persister/Collection/CachedCollectionPersister.php",
"chars": 1046,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Persister\\Collection;\n\nuse Doctrine\\Common\\Collections\\Col"
},
{
"path": "src/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersister.php",
"chars": 2298,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Persister\\Collection;\n\nuse Doctrine\\ORM\\Cache\\CollectionCa"
},
{
"path": "src/Cache/Persister/Collection/ReadOnlyCachedCollectionPersister.php",
"chars": 749,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Persister\\Collection;\n\nuse Doctrine\\ORM\\Cache\\Exception\\Ca"
},
{
"path": "src/Cache/Persister/Collection/ReadWriteCachedCollectionPersister.php",
"chars": 3074,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Persister\\Collection;\n\nuse Doctrine\\ORM\\Cache\\CollectionCa"
},
{
"path": "src/Cache/Persister/Entity/AbstractEntityPersister.php",
"chars": 18415,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Persister\\Entity;\n\nuse Doctrine\\Common\\Collections\\Criteri"
},
{
"path": "src/Cache/Persister/Entity/CachedEntityPersister.php",
"chars": 541,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Persister\\Entity;\n\nuse Doctrine\\ORM\\Cache\\EntityCacheKey;\n"
},
{
"path": "src/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersister.php",
"chars": 2350,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Persister\\Entity;\n\nuse Doctrine\\ORM\\Cache\\EntityCacheKey;\n"
},
{
"path": "src/Cache/Persister/Entity/ReadOnlyCachedEntityPersister.php",
"chars": 504,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Persister\\Entity;\n\nuse Doctrine\\ORM\\Cache\\Exception\\Cannot"
},
{
"path": "src/Cache/Persister/Entity/ReadWriteCachedEntityPersister.php",
"chars": 2783,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Persister\\Entity;\n\nuse Doctrine\\ORM\\Cache\\ConcurrentRegion"
},
{
"path": "src/Cache/QueryCache.php",
"chars": 692,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\ORM\\Query\\ResultSetMapping;\n\n/**\n * Defines"
},
{
"path": "src/Cache/QueryCacheEntry.php",
"chars": 650,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse function microtime;\n\nclass QueryCacheEntry implement"
},
{
"path": "src/Cache/QueryCacheKey.php",
"chars": 516,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\ORM\\Cache;\n\n/**\n * A cache key that identif"
},
{
"path": "src/Cache/QueryCacheValidator.php",
"chars": 279,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\n/**\n * Cache query validator interface.\n */\ninterface Qu"
},
{
"path": "src/Cache/Region/DefaultRegion.php",
"chars": 3036,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Region;\n\nuse Doctrine\\ORM\\Cache\\CacheEntry;\nuse Doctrine\\O"
},
{
"path": "src/Cache/Region/FileLockRegion.php",
"chars": 4826,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Region;\n\nuse Doctrine\\ORM\\Cache\\CacheEntry;\nuse Doctrine\\O"
},
{
"path": "src/Cache/Region/UpdateTimestampCache.php",
"chars": 462,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Region;\n\nuse Doctrine\\ORM\\Cache\\CacheKey;\nuse Doctrine\\ORM"
},
{
"path": "src/Cache/Region.php",
"chars": 2097,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\ORM\\Cache\\Exception\\CacheException;\n\n/**\n *"
},
{
"path": "src/Cache/RegionsConfiguration.php",
"chars": 1453,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\n/**\n * Cache regions configuration\n */\nclass RegionsConf"
},
{
"path": "src/Cache/TimestampCacheEntry.php",
"chars": 642,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse function microtime;\n\nclass TimestampCacheEntry imple"
},
{
"path": "src/Cache/TimestampCacheKey.php",
"chars": 307,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\n/**\n * A key that identifies a timestamped space.\n */\ncl"
},
{
"path": "src/Cache/TimestampQueryCacheValidator.php",
"chars": 879,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse function microtime;\n\nclass TimestampQueryCacheValida"
},
{
"path": "src/Cache/TimestampRegion.php",
"chars": 424,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\n/**\n * Defines the contract for a cache region which wil"
},
{
"path": "src/Cache.php",
"chars": 3131,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM;\n\nuse Doctrine\\ORM\\Cache\\QueryCache;\nuse Doctrine\\ORM\\Cache\\Regi"
},
{
"path": "src/Configuration.php",
"chars": 23531,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse Doctrine\\Dep"
},
{
"path": "src/Decorator/EntityManagerDecorator.php",
"chars": 4469,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Decorator;\n\nuse DateTimeInterface;\nuse Doctrine\\Common\\EventMana"
},
{
"path": "src/EntityManager.php",
"chars": 18938,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM;\n\nuse BackedEnum;\nuse DateTimeInterface;\nuse Doctrine\\Common\\Eve"
},
{
"path": "src/EntityManagerInterface.php",
"chars": 7611,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM;\n\nuse DateTimeInterface;\nuse Doctrine\\Common\\EventManager;\nuse D"
},
{
"path": "src/EntityNotFoundException.php",
"chars": 1090,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM;\n\nuse Doctrine\\ORM\\Exception\\ORMException;\nuse RuntimeException;"
},
{
"path": "src/EntityRepository.php",
"chars": 7719,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM;\n\nuse BadMethodCallException;\nuse Doctrine\\Common\\Collections\\Ab"
},
{
"path": "src/Event/ListenersInvoker.php",
"chars": 3037,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\Common\\EventArgs;\nuse Doctrine\\Common\\Event"
},
{
"path": "src/Event/LoadClassMetadataEventArgs.php",
"chars": 653,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\OR"
},
{
"path": "src/Event/OnClassMetadataNotFoundEventArgs.php",
"chars": 1345,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\Pe"
},
{
"path": "src/Event/OnClearEventArgs.php",
"chars": 398,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\Pe"
},
{
"path": "src/Event/OnFlushEventArgs.php",
"chars": 367,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\Pe"
},
{
"path": "src/Event/PostFlushEventArgs.php",
"chars": 370,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\Pe"
},
{
"path": "src/Event/PostLoadEventArgs.php",
"chars": 277,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\Pe"
},
{
"path": "src/Event/PostPersistEventArgs.php",
"chars": 280,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\Pe"
},
{
"path": "src/Event/PostRemoveEventArgs.php",
"chars": 279,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\Pe"
},
{
"path": "src/Event/PostUpdateEventArgs.php",
"chars": 279,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\Pe"
},
{
"path": "src/Event/PreFlushEventArgs.php",
"chars": 368,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\Pe"
},
{
"path": "src/Event/PrePersistEventArgs.php",
"chars": 279,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\Pe"
},
{
"path": "src/Event/PreRemoveEventArgs.php",
"chars": 278,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\Pe"
},
{
"path": "src/Event/PreUpdateEventArgs.php",
"chars": 2545,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\OR"
},
{
"path": "src/Events.php",
"chars": 4019,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM;\n\n/**\n * Container for all ORM events.\n *\n * This class cannot b"
},
{
"path": "src/Exception/ConfigurationException.php",
"chars": 126,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\ninterface ConfigurationException extends ORMExceptio"
},
{
"path": "src/Exception/DuplicateFieldException.php",
"chars": 377,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse LogicException;\n\nuse function sprintf;\n\nclass Du"
},
{
"path": "src/Exception/EntityIdentityCollisionException.php",
"chars": 1229,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse Exception;\n\nuse function sprintf;\n\nfinal class E"
},
{
"path": "src/Exception/EntityManagerClosed.php",
"chars": 291,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse RuntimeException;\n\nfinal class EntityManagerClos"
},
{
"path": "src/Exception/EntityMissingAssignedId.php",
"chars": 712,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse LogicException;\n\nuse function get_debug_type;\n\nf"
},
{
"path": "src/Exception/InvalidEntityRepository.php",
"chars": 443,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse Doctrine\\ORM\\EntityRepository;\nuse LogicExceptio"
},
{
"path": "src/Exception/InvalidHydrationMode.php",
"chars": 347,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse LogicException;\n\nuse function sprintf;\n\nfinal cl"
},
{
"path": "src/Exception/ManagerException.php",
"chars": 133,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse Throwable;\n\ninterface ManagerException extends T"
},
{
"path": "src/Exception/MissingIdentifierField.php",
"chars": 458,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse LogicException;\n\nuse function sprintf;\n\nfinal cl"
},
{
"path": "src/Exception/MissingMappingDriverImplementation.php",
"chars": 431,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse LogicException;\n\nfinal class MissingMappingDrive"
},
{
"path": "src/Exception/MultipleSelectorsFoundException.php",
"chars": 622,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse LogicException;\n\nuse function implode;\nuse funct"
},
{
"path": "src/Exception/NoMatchingPropertyException.php",
"chars": 424,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse LogicException;\n\nuse function sprintf;\n\nclass No"
},
{
"path": "src/Exception/NotSupported.php",
"chars": 1148,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse LogicException;\n\nuse function sprintf;\n\n/** @dep"
},
{
"path": "src/Exception/ORMException.php",
"chars": 129,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse Throwable;\n\ninterface ORMException extends Throw"
},
{
"path": "src/Exception/PersisterException.php",
"chars": 203,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse Doctrine\\ORM\\Persisters\\PersisterException as Ba"
},
{
"path": "src/Exception/RepositoryException.php",
"chars": 221,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\n/**\n * This interface should be implemented by all e"
},
{
"path": "src/Exception/SchemaToolException.php",
"chars": 136,
"preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse Throwable;\n\ninterface SchemaToolException extend"
}
]
// ... and 1445 more files (download for full content)
About this extraction
This page contains the full source code of the doctrine/orm GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1645 files (6.3 MB), approximately 1.7M tokens, and a symbol index with 10195 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.