Doctrine Configuration Reference (DoctrineBundle)

The DoctrineBundle integrates both the DBAL and ORM Doctrine projects in Symfony applications. All these options are configured under the doctrine key in your application configuration.

DoctrineBundle は、DBAL と ORM Doctrine プロジェクトの両方を Symfony アプリケーションに統合します。これらのオプションはすべて、アプリケーション構成の教義キーの下で構成されます。
1
2
3
4
5
# displays the default config values defined by Symfony
$ php bin/console config:dump-reference doctrine

# displays the actual config values used by your application
$ php bin/console debug:config doctrine

Note

ノート

When using XML, you must use the http://symfony.com/schema/dic/doctrine namespace and the related XSD schema is available at: https://symfony.com/schema/dic/doctrine/doctrine-1.0.xsd

XML を使用する場合、http://symfony.com/schema/dic/doctrinenamespace を使用する必要があり、関連する XSD スキーマは https://symfony.com/schema/dic/doctrine/doctrine-1.0.xsd で入手できます。

Doctrine DBAL Configuration

DoctrineBundle supports all parameters that default Doctrine drivers accept, converted to the XML or YAML naming standards that Symfony enforces. See the Doctrine DBAL documentation for more information. The following block shows all possible configuration keys:

DoctrineBundle は、デフォルトの Doctrine ドライバーが受け入れるすべてのパラメーターをサポートし、Symfony が強制する XML または YAML 命名標準に変換されます。詳細については、Doctrine DBAL のドキュメントを参照してください。次のブロックは、すべての可能な構成キーを示しています。
  • YAML
    YAML
  • XML
    XML
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
26
27
28
doctrine:
    dbal:
        dbname:               database
        host:                 localhost
        port:                 1234
        user:                 user
        password:             secret
        driver:               pdo_mysql
        # if the url option is specified, it will override the above config
        url:                  mysql://db_user:db_password@127.0.0.1:3306/db_name
        # the DBAL driverClass option
        driver_class:         App\DBAL\MyDatabaseDriver
        # the DBAL driverOptions option
        options:
            foo: bar
        path:                 '%kernel.project_dir%/var/data/data.sqlite'
        memory:               true
        unix_socket:          /tmp/mysql.sock
        # the DBAL wrapperClass option
        wrapper_class:        App\DBAL\MyConnectionWrapper
        charset:              utf8mb4
        logging:              '%kernel.debug%'
        platform_service:     App\DBAL\MyDatabasePlatformService
        server_version:       '5.7'
        mapping_types:
            enum: string
        types:
            custom: App\DBAL\MyCustomType

Note

ノート

The server_version option was added in Doctrine DBAL 2.5, which is used by DoctrineBundle 1.3. The value of this option should match your database server version (use postgres -V or psql -V command to find your PostgreSQL version and mysql -V to get your MySQL version).

server_version オプションは、DoctrineBundle 1.3 で使用される Doctrine DBAL 2.5 で追加されました。このオプションの値は、データベース サーバーのバージョンと一致する必要があります (postgres -V または psql -V コマンドを使用して PostgreSQL のバージョンを確認し、mysql -V を使用して MySQL のバージョンを確認します)。

If you are running a MariaDB database, you must prefix the server_version value with mariadb- (e.g. server_version: mariadb-10.4.14).

MariaDB データベースを実行している場合は、server_version 値の前に mariadb- を付ける必要があります (例: server_version: mariadb-10.4.14)。

Always wrap the server version number with quotes to parse it as a string instead of a float number. Otherwise, the floating-point representation issues can make your version be considered a different number (e.g. 5.7 will be rounded as 5.6999999999999996447286321199499070644378662109375).

サーバーのバージョン番号を常に引用符で囲み、浮動小数点数ではなく文字列として解析します。そうしないと、浮動小数点表現の問題により、バージョンが異なる数値と見なされる可能性があります (たとえば、5.7 は 5.699999999999996447286321199499070644378662109375 に丸められます)。

If you don't define this option and you haven't created your database yet, you may get PDOException errors because Doctrine will try to guess the database server version automatically and none is available.

このオプションを定義せず、データベースをまだ作成していない場合、Doctrine がデータベース サーバーのバージョンを自動的に推測しようとして、何も利用できないため、PDOException エラーが発生する可能性があります。

If you want to configure multiple connections in YAML, put them under the connections key and give them a unique name:

YAML で複数の接続を構成する場合は、接続キーの下に配置し、一意の名前を付けます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
doctrine:
    dbal:
        default_connection:       default
        connections:
            default:
                dbname:           Symfony
                user:             root
                password:         null
                host:             localhost
                server_version:   '5.6'
            customer:
                dbname:           customer
                user:             root
                password:         null
                host:             localhost
                server_version:   '5.7'

The database_connection service always refers to the default connection, which is the first one defined or the one configured via the default_connection parameter.

database_connection サービスは、常にデフォルト接続を参照します。これは、最初に定義された接続か、default_connection パラメータを介して構成された接続です。

Each connection is also accessible via the doctrine.dbal.[name]_connection service where [name] is the name of the connection. In a controller you can access it using the getConnection() method and the name of the connection:

各接続は doctrine.dbal.[name]_connectionservice 経由でもアクセスできます。[name] は接続の名前です。コントローラーでは、getConnection() メソッドと接続の名前を使用してアクセスできます。
1
2
3
4
5
6
7
8
9
10
11
12
13
// src/Controller/SomeController.php
use Doctrine\Persistence\ManagerRegistry;

class SomeController
{
    public function someMethod(ManagerRegistry $doctrine)
    {
        $connection = $doctrine->getConnection('customer');
        $result = $connection->fetchAll('SELECT name FROM customer');

        // ...
    }
}

Doctrine ORM Configuration

This following configuration example shows all the configuration defaults that the ORM resolves to:

次の構成例は、ORM が解決するすべての構成の既定値を示しています。
1
2
3
4
5
6
7
8
9
10
11
12
doctrine:
    orm:
        auto_mapping: true
        # the standard distribution overrides this to be true in debug, false otherwise
        auto_generate_proxy_classes: false
        proxy_namespace: Proxies
        proxy_dir: '%kernel.cache_dir%/doctrine/orm/Proxies'
        default_entity_manager: default
        metadata_cache_driver: array
        query_cache_driver: array
        result_cache_driver: array
        naming_strategy: doctrine.orm.naming_strategy.default

There are lots of other configuration options that you can use to overwrite certain classes, but those are for very advanced use-cases only.

特定のクラスを上書きするために使用できる構成オプションは他にもたくさんありますが、それらは非常に高度なユースケース専用です。

Shortened Configuration Syntax

When you are only using one entity manager, all config options available can be placed directly under doctrine.orm config level.

エンティティ マネージャを 1 つだけ使用している場合、利用可能なすべての設定オプションは doctrine.orm 設定レベルの直下に配置できます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
doctrine:
    orm:
        # ...
        query_cache_driver:
            # ...
        metadata_cache_driver:
            # ...
        result_cache_driver:
            # ...
        connection: ~
        class_metadata_factory_name:  Doctrine\ORM\Mapping\ClassMetadataFactory
        default_repository_class:  Doctrine\ORM\EntityRepository
        auto_mapping: false
        naming_strategy: doctrine.orm.naming_strategy.default
        hydrators:
            # ...
        mappings:
            # ...
        dql:
            # ...
        filters:
            # ...

This shortened version is commonly used in other documentation sections. Keep in mind that you can't use both syntaxes at the same time.

この短縮バージョンは、他のドキュメント セクションでよく使用されます。両方の構文を同時に使用できないことに注意してください。

Caching Drivers

Use any of the existing Symfony Cache pools or define new pools to cache each of Doctrine ORM elements (queries, results, etc.):

既存の Symfony キャッシュ プールのいずれかを使用するか、新しいプールを定義して各 Doctrine ORM 要素 (クエリ、結果など) をキャッシュします。
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
26
27
# config/packages/prod/doctrine.yaml
framework:
    cache:
        pools:
            doctrine.result_cache_pool:
                adapter: cache.app
            doctrine.system_cache_pool:
                adapter: cache.system

doctrine:
    orm:
        # ...
        metadata_cache_driver:
            type: pool
            pool: doctrine.system_cache_pool
        query_cache_driver:
            type: pool
            pool: doctrine.system_cache_pool
        result_cache_driver:
            type: pool
            pool: doctrine.result_cache_pool

        # in addition to Symfony Cache pools, you can also use the
        # 'type: service' option to use any service as the cache
        query_cache_driver:
            type: service
            id: App\ORM\MyCacheService

Mapping Configuration

Explicit definition of all the mapped entities is the only necessary configuration for the ORM and there are several configuration options that you can control. The following configuration options exist for a mapping:

マップされたすべてのエンティティの明示的な定義は、ORM に必要な唯一の構成であり、制御できる構成オプションがいくつかあります。マッピングには次の構成オプションがあります。

type

One of annotation (for PHP annotations; it's the default value), attribute (for PHP attributes), xml, yml, php or staticphp. This specifies which type of metadata type your mapping uses.

アノテーション (PHP アノテーションの場合。デフォルト値)、attribute (PHP 属性の場合)、xml、yml、php、または staticphp のいずれか。これは、マッピングが使用するメタデータ タイプのタイプを指定します。

See Doctrine Metadata Drivers for more information about this option.

このオプションの詳細については、Doctrine Metadata Drivers を参照してください。

dir

Absolute path to the mapping or entity files (depending on the driver).

マッピングまたはエンティティ ファイルへの絶対パス (ドライバーによって異なります)。

prefix

A common namespace prefix that all entities of this mapping share. This prefix should never conflict with prefixes of other defined mappings otherwise some of your entities cannot be found by Doctrine.

このマッピングのすべてのエンティティが共有する共通の名前空間プレフィックス。この接頭辞は、他の定義されたマッピングの接頭辞と衝突するべきではありません。そうしないと、Doctrine がエンティティの一部を見つけることができません。

alias

Doctrine offers a way to alias entity namespaces to simpler, shorter names to be used in DQL queries or for Repository access.

Doctrine は、DQL クエリやリポジトリ アクセスで使用するために、エンティティの名前空間をより単純で短い名前にエイリアスする方法を提供します。

is_bundle

This option is false by default and it's considered a legacy option. It was only useful in previous Symfony versions, when it was recommended to use bundles to organize the application code.

このオプションはデフォルトでは false であり、従来のオプションと見なされます。バンドルを使用してアプリケーションコードを整理することが推奨されていた以前の Symfony バージョンでのみ有用でした。

Custom Mapping Entities in a Bundle

Doctrine's auto_mapping feature loads attribute configuration from the Entity/ directory of each bundle and looks for other formats (e.g. YAML, XML) in the Resources/config/doctrine directory.

Doctrine の auto_mapping 機能は、各バンドルの Entity/ ディレクトリから属性設定をロードし、Resources/config/doctrine ディレクトリで他の形式 (YAML、XML など) を探します。

If you store metadata somewhere else in your bundle, you can define your own mappings, where you tell Doctrine exactly where to look, along with some other configurations.

バンドル内の別の場所にメタデータを保存する場合、独自のマッピングを定義して、Doctrine に正確な場所を指定し、その他の設定を行うことができます。

If you're using the auto_mapping configuration, you just need to overwrite the configurations you want. In this case it's important that the key of the mapping configurations corresponds to the name of the bundle.

auto_mapping 構成を使用している場合は、必要な構成を上書きするだけです。この場合、マッピング構成のキーがバンドルの名前に対応していることが重要です。

For example, suppose you decide to store your XML configuration for AppBundle entities in the @AppBundle/SomeResources/config/doctrine directory instead:

たとえば、代わりに @AppBundle/SomeResources/config/doctrine ディレクトリに AppBundle エンティティの XML 構成を保存することにしたとします。
  • YAML
    YAML
  • XML
    XML
  • PHP
    PHP
1
2
3
4
5
6
7
8
9
10
doctrine:
    # ...
    orm:
        # ...
        auto_mapping: true
        mappings:
            # ...
            AppBundle:
                type: xml
                dir: SomeResources/config/doctrine

Mapping Entities Outside of a Bundle

For example, the following looks for entity classes in the Entity namespace in the src/Entity directory and gives them an App alias (so you can say things like App:Post):

たとえば、次の例では、src/Entity ディレクトリの Entitynamespace でエンティティ クラスを検索し、それらに App エイリアスを付与します (App:Post のように記述できます)。
  • YAML
    YAML
  • XML
    XML
  • PHP
    PHP
1
2
3
4
5
6
7
8
9
10
11
12
doctrine:
        # ...
        orm:
            # ...
            mappings:
                # ...
                SomeEntityNamespace:
                    type: annotation
                    dir: '%kernel.project_dir%/src/Entity'
                    is_bundle: false
                    prefix: App\Entity
                    alias: App

Detecting a Mapping Configuration Format

If the type on the bundle configuration isn't set, the DoctrineBundle will try to detect the correct mapping configuration format for the bundle.

バンドル構成のタイプが設定されていない場合、DoctrineBundle はバンドルの正しいマッピング構成フォーマットを検出しようとします。

DoctrineBundle will look for files matching *.orm.[FORMAT] (e.g. Post.orm.yaml) in the configured dir of your mapping (if you're mapping a bundle, then dir is relative to the bundle's directory).

DoctrineBundle は、マッピングの設定済みディレクトリで *.orm.[FORMAT] (例えば、Post.orm.yaml) に一致するファイルを探します (バンドルをマッピングしている場合、dir はバンドルのディレクトリに対して相対的です)。

The bundle looks for (in this order) XML, YAML and PHP files. Using the auto_mapping feature, every bundle can have only one configuration format. The bundle will stop as soon as it locates one.

バンドルは、XML、YAML、および PHP ファイルを (この順序で) 検索します。バンドルは見つかるとすぐに停止します。

If it wasn't possible to determine a configuration format for a bundle, the DoctrineBundle will check if there is an Entity folder in the bundle's root directory. If the folder exist, Doctrine will fall back to using an annotation driver.

バンドルの設定フォーマットを決定できなかった場合、DoctrineBundle はバンドルのルート ディレクトリにエンティティ フォルダがあるかどうかを確認します。フォルダーが存在する場合、Doctrine は注釈ドライバーの使用にフォールバックします。

Default Value of Dir

If dir is not specified, then its default value depends on which configuration driver is being used. For drivers that rely on the PHP files (annotation, staticphp) it will be [Bundle]/Entity. For drivers that are using configuration files (XML, YAML, ...) it will be [Bundle]/Resources/config/doctrine.

dir が指定されていない場合、そのデフォルト値は、使用されている構成ドライバーによって異なります。 PHP ファイル (annotation、staticphp) に依存するドライバーの場合、[Bundle]/Entity になります。構成ファイル (XML、YAML など) を使用しているドライバーの場合、[Bundle]/Resources/config/doctrine になります。

If the dir configuration is set and the is_bundle configuration is true, the DoctrineBundle will prefix the dir configuration with the path of the bundle.

dir 構成が設定され、is_bundle 構成が true の場合、DoctrineBundle は dir 構成の前にバンドルのパスを追加します。