The Doctrine team is not willing to implement this feature.
There are several solutions to your problem, each having its own drawbacks:
- Add a custom numeric function: see this DQL RAND() function
(might be slow if you have lots of matching rows) - Use a native query
(I personally try to avoid this solution, which I found hard to maintain) - Issue a raw SQL query first to get some IDs randomly, then use the DQL
WHERE x.id IN(?)
to load the associated objects, by passing the array of IDs as a parameter.
This solution involves two separate queries, but might give better performance than the first solution (other raw SQL techniques thanORDER BY RAND()
exist, I won’t detail them here, you’ll find some good resources on this website).