Important

You are browsing documentation for version 5.0 of OroCommerce. Support of this version ended in January 2025. Read the documentation for version 6.1 (the latest LTS version) to get up-to-date information.

See our Release Process documentation for more information on the currently supported and upcoming releases.

Resolving ORM Query Hints 

The Query Hint Resolver service makes building configuration-based queries, like grids and API, easier and more flexible.

To map a hint to a custom tree walker, you can use DI container configuration, for example:

oro_security.query_hint.filter_by_current_user:
    public: false
    abstract: true
    tags:
        -
            name: oro_entity.query_hint
            hint: oro_security.filter_by_current_user
            alias: HINT_FILTER_BY_CURRENT_USER
            tree_walker: Oro\Bundle\SecurityBundle\ORM\Walker\CurrentUserWalker
            walker_hint_provider: oro_security.walker_hint_provider.current_user

The walker_hint_provider attribute is optional and can be used to provide a service to be used to set additional query hints required to work the walker specified in the attribute tree_walker. This service must implement QueryWalkerHintProviderInterface and must be registered in the DI container, for example:

oro_security.walker_hint_provider.current_user:
    public: false
    class: Oro\Bundle\SecurityBundle\ORM\Walker\CurrentUserWalkerHintProvider
    arguments:
         - '@security.token_storage'

To map a hint to a custom output walker, use the attribute output_walker instead of tree_walker in the DI container configuration, for example:

oro_translation.query_hint.translatable:
    public: false
    abstract: true
    tags:
        -
            name: oro_entity.query_hint
            hint: oro_translation.translatable
            alias: HINT_TRANSLATABLE
            output_walker: Oro\Component\DoctrineUtils\ORM\Walker\TranslatableSqlWalker

The following example shows how you can use hints in YAML configuration files:

datagrids:
    my-email-origins-grid:
        source:
            type: orm
            query:
                select:
                    - origin
                from:
                    - { table: Oro\Bundle\EmailBundle\Entity\EmailOrigin, alias: origin }
            hints:
                - HINT_FILTER_BY_CURRENT_USER