web-dev-qa-db-ja.com

非推奨:番号を認識させないDoctrine \ ORM \ Mapping \ UnderscoreNamingStrategyは非推奨です

私はSymfony 4.3.8を使用していますが、これらの非推奨に関する情報が見つかりません。

ユーザー非推奨:番号を認識させずにDoctrine\ORM\Mapping\UnderscoreNamingStrategyを作成することは非推奨であり、Doctrine ORM 3.0では削除されます。

番号を認識させずにDoctrine\ORM\Mapping\UnderscoreNamingStrategyを作成することは非推奨であり、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

しかし、私は番号を認識できるようにするオプションを見つけていません:(

52
leobrl

ほとんどの場合、私はコメントでこの種の質問に答えるだけですが、他の開発者がこの問題に遭遇するのではないかと思います。私は少し調べてみましたが、この問題に関する明確なドキュメントは見つかりませんでした。おそらく、DoctrineBundleがDoctrine=人々の管理下にあり、Symfony開発者ではないためです。あるいは、私は単に悪い検索者です。

いずれにしても、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」を実行することをお勧めします。変更は数週間前から出されており、変更に対する怒りの声はあまりないようです。そのため、ほとんどの列名には番号が埋め込まれていないと思います。これまでのところ。

96
Cerad