더 이상 사용되지 않음 : 번호를 인식하지 않고 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에서 제거됩니다.

나는 stacktrace에서 검색하고 이것을 발견했다 :

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 (방금 출시 된 프로젝트) 프로젝트를 만들고 doctrine.yaml에는 "naming_strategy : doctrine.orm.naming_strategy.underscore_number_aware"가 있습니다. 당신을 조정하십시오.
Cerad

답변:


111

대부분의 경우 주석으로 이런 종류의 질문에 대답하지만 다른 개발자 가이 문제를 겪을 수 있다고 생각합니다. 나는 조금 둘러 보고이 문제에 대한 명확한 문서를 찾을 수 없었습니다. 아마도 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"을 실행하여 이것이 데이터베이스 열 이름에 영향을 미치는지 확인하고 적절하게 조정할 수 있습니다. 몇 주 동안 변경 사항이 적용되었으며 변경 사항에 대한 분노가 많지 않은 것으로 보이므로 대부분의 열 이름에는 숫자가 포함되어 있지 않습니다. 적어도 지금까지.


이전 전략 변경 (예 : $ singleMd5Key를 single_payu_md5key로 바꾸고 새 전략 (올바르게) single_payu_md5_key로 바 change) 그러나 BC 변화 인 coz는 우리 모두 엉망입니다.
Tomek Kobyliński

@ 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.