A repository wrapping a single ORM, forwarding find to find, is indirection with nothing behind it — the abstraction has one implementation and will never have another, and every method is a pass-through nobody can remove.
interface ProductCatalogue
{
/** @return Product|null */
public function findBySku($sku);
}
final class DatabaseCatalogue implements ProductCatalogue { /* ... */ }
final class SearchCatalogue implements ProductCatalogue { /* ... */ }
final class CachedCatalogue implements ProductCatalogue { /* wraps either */ }
It starts paying the moment there is a second source — a search index alongside the table, a remote API, a cache in front of both — because the calling code stops caring which one answered. That is also the point at which the interface should be written in terms of the domain question rather than the storage: findBySku, not where(["sku" => $sku]), which would leak the query language into every caller.