doctrine / persistence

The Doctrine Persistence project is a library that provides common abstractions for object mapper persistence.
https://www.doctrine-project.org/projects/persistence.html
MIT License
3.94k stars 63 forks source link

Adding not-nullable search methods to ObjectRepository #23

Open Jean85 opened 6 years ago

Jean85 commented 6 years ago

I'm currently in the process of improving my codebase with static analysis (PHPStan in this case), and I've found an interesting use case to improve the ObjectRepository interface: I find it pretty annoying have to specify/check each time that I don't expect null values from my find()/findOneBy() methods etc, so it would be nice if there was some get*() twin methods for which a nullable return would not be allowed.

This is obviously a BC, so it should target 3.0, hence leveraging nullable types from PHP 7.1 it would make really sense.... What do you think?

PS: since we already have doctrine/common#826 doctrine/common#738 etc, maybe we can create a 3.0 milestone?

Majkl578 commented 6 years ago

It could be done similarly to AbstractQuery::getSingleResult()/AbstractQuery::getOneOrNullResult(), although find with null should probably be the happy path since catching exception is more costly.

maybe we can create a 3.0 milestone

Doctrine Common is to be split and obsoleted for 3.0 (see #826) so I don't think that tracking 3.0 milestone here is a way to go in long-term.

malarzm commented 5 years ago

FWIW in ODM we ended up not introducing get method and @alcaeus had good points on why: https://github.com/doctrine/mongodb-odm/pull/1613#issuecomment-311143877

drupol commented 2 years ago

Sorry to dig up old topics but this is precisely the reason why I wrote a new package last week.

Find it here: https://github.com/loophp/repository-monadic-helper

It fixes the issue you're describing, and it's fully typed !