찾다

 >  Q&A  >  본문

Symfony 5 - Doctrine의 Schema_filter가 제대로 작동하지 않습니다.

<p>내 프로젝트에서 명령줄 <code>doctrine:schema:update --force</code>를 실행할 때 다음과 같은 두 항목을 무시하려고 합니다. </p> <pre class="brush:php;toolbar:false;">/*** @ORMEntity(readOnly=true) * @ORMTable(이름="view_tableau_de_bord")*/ 클래스 ViewTableauDeBord { //... }</pre> <p>내 Doctrine.yaml 구성 파일에서: </p> <pre class="brush:php;toolbar:false;">교리: dbal: default_connection: 기본값 사이: 기본: url: '%env(해결:DATABASE_URL)%' 드라이버: 'pdo_pgsql' 서버 버전: '12' 문자셋:utf8 Schema_filter: ~^(?!view_)~ # ...</pre> <p>Doctrine은 모든 엔터티를 계속 생성하며 내 보기는 <code>schema_filter</code>에 있습니다. 이에 대한 설명은 무엇입니까? 프로젝트에서 이 옵션을 사용한 것은 이번이 처음입니다. </p> <p>프로젝트 설정: </p>

P粉002023326P粉002023326454일 전535

모든 응답(2)나는 대답할 것이다

  • P粉186897465

    P粉1868974652023-08-27 17:01:05

    플래그 readOnly=true로 표시된 엔터티는 더 이상 업데이트를 추적하지 않지만 문서에 설명된 대로 행을 삽입하거나 삭제할 수 있습니다.

    doctrine:schema:update 명령은 스키마를 업데이트하기 위해 여전히 테이블을 고려합니다.

    질문 "스키마 관리자 업데이트 실행 시 Doctrine2 엔터티 무시"에 대한 답변에는 스키마 업데이트에서 엔터티를 무시할 수 있는 3가지 유효한 옵션이 있습니다.

    회신하다
    0
  • P粉455093123

    P粉4550931232023-08-27 14:04:02

    스키마_필터

    schema_filter 엔터티를 "필터링"하도록 만들어진 것이 아니라 교리 인식에서 db 테이블을 필터링하도록 만들어졌습니다.

    예:
    view_booking_by_customer_per_year라는 사용자 정의 원시 PHP cronjob에서 업데이트되는 테이블을 수동으로 생성한다고 가정하면 이 테이블은 프로젝트의 코드에서는 사용되지 않지만 데이터 분석에는 사용됩니다.

    이것은 일반적인 예입니다. 스키마를 업데이트할 때마다 이러한 쿼리를 생성하고 싶지는 않습니다.

    으아악

    그래서 schema_filter를 사용하면 교리의 유효성 검사 및 업데이트 프로세스에서 이 테이블을 무시하도록 지시할 수 있습니다.

    원시 SQL을 사용하여 임의의 테이블을 생성하고 doctrine:schema:validate를 사용해 보세요. database is not in sync 오류가 표시됩니다. Schema_filter에 넣으면 더 이상 오류가 발생하지 않습니다.

    이것은 doctrine:migration:diff and doctrine:schema:update

    에 적합합니다.

    schema_ignore_class

    그러나 데이터베이스 내에서 엔터티 생성을 피하려면 Ernesto의 답변에 있는 링크에서 해당 항목을 찾을 수 있습니다.

    으아악

    Doctrine 2.7 버전에서만 작동합니다. 여기에서 전체 예를 찾을 수 있습니다. 스키마 관리자 업데이트 실행 시 Doctrine2 엔터티 무시

    교리 마이그레이션 사용

    데이터베이스 변경을 수행하려면 doctrine:migration:diff then doctrine:migration:migrate instead of doctrine:schema:update를 사용하는 것이 좋습니다. 로컬 개발자에게는 괜찮지만 프로덕션 환경에서는 매우 나쁜 습관입니다.

    https://symfony.com/bundles/DoctrineMigrationsBundle/current/index.html

    회신하다
    0
  • 취소회신하다