1. ホーム
  2. symfony

[解決済み] 非推奨。数を意識させないDoctrineORMMappingUnderscoreNamingStrategyは非推奨です。

2023-06-02 11:11:59

Question

Symfony 4.3.8を使っていますが、これらの非推奨事項に関する情報を見つけることができません。

User Deprecated: Doctrine ORM 3.0 では、番号を意識せずに DoctrineMappingUnderscoreNamingStrategy を作成することは非推奨となり削除されます。

Creating DoctrineORMMapping InderscoreNamingStrategy without making it number aware は非推奨で、Doctrine ORM 3.0 で削除される予定です。

スタックトレースで検索したら、こんなのが出てきました。

class UnderscoreNamingStrategy implements NamingStrategy
{
private const DEFAULT_PATTERN      = '/(?<=[a-z])([A-Z])/';
private const NUMBER_AWARE_PATTERN = '/(?<=[a-z0-9])([A-Z])/';

/**
 * Underscore naming strategy construct.
 *
 * @param int $case CASE_LOWER | CASE_UPPER
 */
public function __construct($case = CASE_LOWER, bool $numberAware = false)
{
    if (! $numberAware) {
        @trigger_error(
            'Creating ' . self::class . ' without making it number aware is deprecated and will be removed in Doctrine ORM 3.0.',
            E_USER_DEPRECATED
        );
    }

    $this->case    = $case;
    $this->pattern = $numberAware ? self::NUMBER_AWARE_PATTERN : self::DEFAULT_PATTERN;
}

このクラスでは、コンストラクタは常にパラメータなしで呼ばれるため、 $numberAware は常に false となります。

このクラスはSymfony Dependency Injectionによって自動生成されたファイル内で呼び出されるので、編集することはできません。

doctrine.yamlにあるのかなと思ったのですが.

doctrine:
orm:
    auto_generate_proxy_classes: true
    naming_strategy: doctrine.orm.naming_strategy.underscore
    auto_mapping: true
    mappings:
        App:
            is_bundle: false
            type: annotation
            dir: '%kernel.project_dir%/src/Entity'
            prefix: 'App\Entity'
            alias: App

しかし、番号を認識させるためのオプションは見つかりませんでした :(

どのように解決するのですか?

ほとんどの場合、私はこの種の質問にはコメントで答えるだけですが、他の開発者がこの問題に遭遇する可能性があると思います。 少し探ってみましたが、この問題についての明確なドキュメントは見つかりませんでした。 おそらく DoctrineBundle は Symfony の開発者ではなく、Doctrine の開発者の管理下にあるのでしょう。 あるいは、私が検索が下手なだけかもしれません。

いずれにせよ、4.3と4.4の間で、アンダースコアの命名規則のサービス名が変更されました。

# doctrine.yaml
orm:
  # 4.3
  naming_strategy: doctrine.orm.naming_strategy.underscore
  # 4.4
  naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware

そして、開発者に名前を変更するように警告する非推奨のメッセージが追加されました。 メッセージがほんの少し明確であれば良かったのですが、まあいいでしょう。 既存のアプリを 4.4 以降にアップグレードする場合は、doctrine.yaml ファイルを手動で編集して減価償却のメッセージを消す必要があるでしょう。

この変更が行われた理由についての詳細な情報 (@janh に感謝) です。 https://github.com/doctrine/orm/blob/2.8.x/UPGRADE.md#deprecated-number-unaware-doctrineormmappingunderscorenamingstrategy https://github.com/doctrine/orm/issues/7855

なぜこのような方法を選択したのか、まだよく分かりませんが、まあいいでしょう。 bin/console doctrine:schema:update --dump-sql" を実行して、これがデータベースの列名に影響するかどうかを確認し、それに応じて調整したいと思うかもしれません。 この変更は数週間前に行われましたが、この変更に対する怒りの声はあまり聞かれません。 少なくとも今のところは。