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 them:
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 tool functionality such as PhpStorm.
In addition, 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, migration towards the new API methods can be made without pressure.
Affected installations¶
All installations with third-party extensions that use those magic methods.
Migration¶
A new set of methods without all the downsides have been added:
findBy(array $criteria, ...): QueryResultInterface
findOneBy(array $criteria, ...):object|null
count(array $criteria, ...): int
The naming of the 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]);