Creative Commons License
This work is licensed under a
Creative Commons
Attribution-Share Alike 3.0
Unported License.

Master Symfony2 fundamentals

Be trained by SensioLabs experts (2 to 6 day sessions -- French or English).
trainings.sensiolabs.com

Discover the SensioLabs Support

Access to the SensioLabs Competency Center for an exclusive and tailor-made support on Symfony
sensiolabs.com

How to Register Custom DQL Functions

Caution: You are browsing the documentation for Symfony version 2.0 which is not maintained anymore. If some of your projects are still using this version, consider upgrading.

How to Register Custom DQL Functions

Doctrine allows you to specify custom DQL functions. For more information on this topic, read Doctrine's cookbook article "DQL User Defined Functions".

In Symfony, you can register your custom DQL functions as follows:

  • YAML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    # app/config/config.yml
    doctrine:
        orm:
            # ...
            entity_managers:
                default:
                    # ...
                    dql:
                        string_functions:
                            test_string: Acme\HelloBundle\DQL\StringFunction
                            second_string: Acme\HelloBundle\DQL\SecondStringFunction
                        numeric_functions:
                            test_numeric: Acme\HelloBundle\DQL\NumericFunction
                        datetime_functions:
                            test_datetime: Acme\HelloBundle\DQL\DatetimeFunction
    
  • XML
    <!-- app/config/config.xml -->
    <container xmlns="http://symfony.com/schema/dic/services"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:doctrine="http://symfony.com/schema/dic/doctrine"
        xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
                            http://symfony.com/schema/dic/doctrine http://symfony.com/schema/dic/doctrine/doctrine-1.0.xsd">
    
        <doctrine:config>
            <doctrine:orm>
                <!-- ... -->
                <doctrine:entity-manager name="default">
                    <!-- ... -->
                    <doctrine:dql>
                        <doctrine:string-function name="test_string>Acme\HelloBundle\DQL\StringFunction</doctrine:string-function>
                        <doctrine:string-function name="second_string>Acme\HelloBundle\DQL\SecondStringFunction</doctrine:string-function>
                        <doctrine:numeric-function name="test_numeric>Acme\HelloBundle\DQL\NumericFunction</doctrine:numeric-function>
                        <doctrine:datetime-function name="test_datetime>Acme\HelloBundle\DQL\DatetimeFunction</doctrine:datetime-function>
                    </doctrine:dql>
                </doctrine:entity-manager>
            </doctrine:orm>
        </doctrine:config>
    </container>
  • PHP
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    // app/config/config.php
    $container->loadFromExtension('doctrine', array(
        'orm' => array(
            // ...
    
            'entity_managers' => array(
                'default' => array(
                    // ...
    
                    'dql' => array(
                        'string_functions' => array(
                            'test_string'   => 'Acme\HelloBundle\DQL\StringFunction',
                            'second_string' => 'Acme\HelloBundle\DQL\SecondStringFunction',
                        ),
                        'numeric_functions' => array(
                            'test_numeric' => 'Acme\HelloBundle\DQL\NumericFunction',
                        ),
                        'datetime_functions' => array(
                            'test_datetime' => 'Acme\HelloBundle\DQL\DatetimeFunction',
                        ),
                    ),
                ),
            ),
        ),
    ));