Deprecation: #100071 - Magic repository findBy() methods¶
See forge#100071
Description¶
Extbase repositories come with a magic __call()
-method to allow calling
the following methods without implementing:
findBy[PropertyName]($propertyValue)
findOneBy[PropertyName]($propertyValue)
countBy[PropertyName]($propertyValue)
These have now been marked as deprecated, as they are "magic", meaning that proper IDE support is not possible, and other PHP-related tooling functionality such as PHPStorm.
In addition, with the magic methods, it is not possible for Extbase repositories to build their own magic method functionality, as the logic is already in use.
Impact¶
As these methods are widely used in almost all Extbase-based extensions, they are marked as deprecated in TYPO3 v12, but will only trigger a deprecation notice in TYPO3 v13, as they will be removed in TYPO3 v14.
This way, the migration towards the new API methods can be taken without pressure.
Affected installations¶
All installations with third-party extensions that use those magic methods.
Migration¶
A new set of methods without all those downsides have been added:
findBy(array $criteria, ...): QueryResultInterface
findOneBy(array $criteria, ...):object|null
count(array $criteria, ...): int
The naming of those methods follows those of doctrine/orm
and only
count()
differs from the formerly countBy()
. While all magic
methods only allow for a single comparison (propertyName
= propertyValue
),
those methods allow for multiple comparisons, called constraints.
findBy[PropertyName]($propertyValue)
can be replaced with a call to findBy
:
$this->blogRepository->findBy(['propertyName' => $propertyValue]);
findOneBy[PropertyName]($propertyValue)
can be replaced with a call to findOneBy
:
$this->blogRepository->findOneBy(['propertyName' => $propertyValue]);
countBy[PropertyName]($propertyValue)
can be replaced with a call to count
:
$this->blogRepository->count(['propertyName' => $propertyValue]);