-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Merge release 2.20.7 into 2.21.x #12242
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
+694
−277
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Fix DQL JOIN syntax in two test cases
…ame in entity hierarchies
Revert "Fix fields of transient classes being considered duplicate with `reportFieldsWhereDeclared` (#11769)"
It is a reserved word since MySQL 9.2: https://dev.mysql.com/doc/refman/9.2/en/create-library.html
Escape library as a table name in tests (#12170)
Bumps [doctrine/.github](https://github.com/doctrine/.github) from 8.0.0 to 10.1.0. - [Release notes](https://github.com/doctrine/.github/releases) - [Commits](doctrine/.github@8.0.0...10.1.0) --- updated-dependencies: - dependency-name: doctrine/.github dependency-version: 10.1.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <[email protected]>
…0.x/doctrine/dot-github-10.1.0 Bump doctrine/.github from 8.0.0 to 10.1.0
…ype conversions This PR fixes the `Criteria` matching API for `IN` and `NIN` conditions with values that are arrays, by making sure that type information for the matched field is passed to the DBAL level correctly. Passing the right parameter type to DBAL is important to make sure parameter conversions are applied before matching at the database level. Memory-based collections (`ArrayCollection`s or initialized collection fields) would perform matching on the objects in memory where no type conversion to the database representation is required, giving correct results. But uninitialized collections that have their conditions evaluated at the database level need to convert parameter values to the database representation before performing the comparison. One extra challenge is that the DBAL type system does currently not support array-valued parameters for custom types. Only a [limited list of types](https://www.doctrine-project.org/projects/doctrine-dbal/en/4.2/reference/data-retrieval-and-manipulation.html#list-of-parameters-conversion) is supported. I discussed this with @morozov at the Doctrine Hackathon and came to the conclusion that it would be best to work around this limitation at the ORM level. Thus, this fix recognizes array-valued parameters and creates multiple placeholders (like `?, ?, ?`) for them, flattening out the arrays in the parameter list and repeating the type information for each one of them. Previous stalled attempt to fix this was in #11897.
* Do not eagerly set metadata from ResolveTargetEntityListener When using the `ResolveTargetEntityListener` to substitute `targetEntities` in association mappings, do not eagerly put the resolved (target) entity into the class metadata cache under the class name of the original entity. #### Motivation I have a library that wants to distribute a MappedSuperclass as the base for some functionality. It will be necessary that clients using the library will extend the MappedSuperclass to fill in some blanks, creating the first real `#[Entity]` instance of it. This client-provided entity will be the primary means of working with the class. Thus, I was following the [note in the documentation](https://www.doctrine-project.org/projects/doctrine-orm/en/3.5/reference/inheritance-mapping.html#mapped-superclasses:~:text=It%20is%2C%20however) and using the `ResolveTargetEntityListener` to declare that whenever an association refers to that mapped superclass, the particular entity class shall be used instead. > One-To-Many associations are not generally possible on a mapped superclass, since they require the "many" side to hold the foreign key. > It is, however, possible to use the [ResolveTargetEntityListener](https://www.doctrine-project.org/projects/doctrine-orm/en/3.5/cookbook/resolve-target-entity-listener.html) to replace references to a mapped superclass with an entity class at runtime. As long as there is only one entity subclass inheriting from the mapped superclass and all references to the mapped superclass are resolved to that entity class at runtime, the mapped superclass can use One-To-Many associations and be named as the targetEntity on the owning sides. #### Changes made The `ResolveTargetEntityListener` primarily does what its name suggests: For newly loaded class metadata, it inspects all associations declared and replaces the `targetEntity` with new (resolved) values. But additionally, when a loaded class is the target of such a resolution, it would also put the class metadata into the cache under the name of the original entity. I think that extra step is wrong, and this PR removes it. It had the side effect that when other classes extending the MappedSuperclass were loaded _after_ the resolve target class has been seen for the first time, the metadata for those classes would not inherit from the mapped superclass anymore, but from the target entity class instead. In my real-life use case, this causes weird mapping errors down the road; as of ^3.0, it would throw a mapping exception asking to configure inheritance mapping. But note that there would be no inheritance between the two entity classes at all. #### More background The documentation [describes the use of `ResolveTargetEntityListener`](https://www.doctrine-project.org/projects/doctrine-orm/en/3.5/cookbook/resolve-target-entity-listener.html) with an interface that is resolved to an entity class. For an interface, adding the extra metadata does not make a difference, since it never interferes with actual entity or mapped superclasses. The initial idea of adding a copy of the entity class metadata under the interface name came from commit 9c7f3f2 in #385. The goal was to make it possible to also find entities by interface names, like so: ``` $em->find('Foo\BarBundle\Entity\PersonInterface', 1); ``` It then [turned out that this only worked when the resolution had already been applied](#385 (comment)). So, the new `onClassMetadataNotFound` event was added and the resolution map would be checked in that case as well (#1181). The inital code stayed in place, possibly giving a small performance gain. In my real-world use case and the test case I added in this PR, the associations are even self-referencing. That should not really be necessary for the problem to surface. I decided to keep it this way to show that the `targetEntity` need not be an interface after all, and that a MappedSuperclass can be used in the same way.
…etry Fix collection filtering API for `IN`/`NOT IN` comparisons that require type conversions
Docs: fix typos and grammar across reference docs
Introduces the `composer docs` command to generate the docs locally, and uses the same tool (`docs-builder`) in the documentation GH workflow.
Use docs builder in ORM repo
Co-authored-by: Grégoire Paris <[email protected]>
This updates the code to avoid triggering the deprecation introduced in doctrine/collections#472.
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 5 to 6. - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](actions/download-artifact@v5...v6) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <[email protected]>
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 5. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](actions/upload-artifact@v4...v5) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <[email protected]>
…0.x/actions/upload-artifact-5 Bump actions/upload-artifact from 4 to 5
…0.x/actions/download-artifact-6 Bump actions/download-artifact from 5 to 6
…apping-initialized Paginator with output walker returns count 0 when the query has previously been executed
Avoid triggering a deprecation notice in doctrine/collections
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Release Notes for 2.20.7
2.20.x bugfix release (patch)
2.20.7
CI
Improvement
Documentation
Test Suite
getMockForAbstractClass()thanks to @derrabusBug
reportFieldsWhereDeclared(#11769)" thanks to @mpdudeIN/NOT INcomparisons that require type conversions thanks to @mpdudeResolveTargetEntityListenerthanks to @mpdudeIN/NOT INexpression handling and support enums when matching on to-many-collections thanks to @mpdudeCode Style
12134: PHPCS 3.13.2 thanks to @greg0ire
12133: PHPStan 2.1.22 thanks to @greg0ire
12053: chore: remove run-all.sh thanks to @alexislefebvre