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


53

私は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

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


3
新しい4.4.0(リリースされたばかり、yea)プロジェクトを作成し、doctrine.yamlに「naming_strategy:doctrine.orm.naming_strategy.underscore_number_aware」が含まれているだけです。あなたのものを微調整してみてください。
Cerad

回答:


111

ほとんどの場合、私はコメントでこの種の質問に答えるだけですが、他の開発者がこの問題に遭遇するのではないかと思います。私は少し調べてみましたが、この問題に関する明確なドキュメントは見つかりませんでした。おそらくDoctrineBundleがDoctrineの開発者ではなく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」を実行することをお勧めします。変更は数週間前から出されており、変更に対する怒りの声はあまりないようです。そのため、ほとんどの列名には番号が埋め込まれていないと思います。これまでのところ。


古い戦略が(誤って)変更されました。たとえば、$ singleMd5Keyがsingle_payu_md5keyに、新しい戦略が(正しく)single_payu_md5_keyに変更されました。しかし、それはBCの変更です。
TomekKobyliński19年

@TomekKobylińskiコード自体のほかに、これに関するドキュメントを見つけることができましたか?Doctrine 3が到着したとき、命名規則が変更される(そしておそらくデータベーススキーマの変更が強制される)理由を理解するのにまだ苦労しています。ちょうど両方のアプローチがサポートされるようです。
Cerad

1
では、データベーススキーマを強制的に変更する代わりに、エンティティマッピングを手動で更新する必要がありますか?どちらが悪いかわからないので、なぜ変更するのかという問題にはまったく対応していません。より「正しい」戦略を提供しても問題ありませんが、元の戦略が関連する意味で「間違っている」理由がまだわかりません。
Cerad

1
この非推奨(phpunitの実行で発見)に飛び込んだ後もここに来ました。その提案の修正を確認して、解答でレシピYAMLへのリンクには良いでしょう:github.com/symfony/recipes/blob/master/doctrine/doctrine-bundle/...
Rvanlaak

1
@Cerad教義のアップグレード情報で何かがあります:github.com/doctrine/orm/blob/2.8.x/...私は思うgithub.com/doctrine/orm/issues/7855は、関連する問題です。
janh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.