<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>
- 심포니 5.4.14
- PHP 7.4.26
- 교리: orm: 2.13.3
- 이론/참고: 1.13.3
- 교리/교리 패키지: 2.7.0
<li>교리/교리 마이그레이션 패키지: 3.2.2</li>
- symfony/doctrine-bridge:5.4.14
- 이론/데이터 장치: 1.5.3
플래그
readOnly=true
로 표시된 엔터티는 더 이상 업데이트를 추적하지 않지만 문서에 설명된 대로 행을 삽입하거나 삭제할 수 있습니다.doctrine:schema:update
명령은 스키마를 업데이트하기 위해 여전히 테이블을 고려합니다.질문 "스키마 관리자 업데이트 실행 시 Doctrine2 엔터티 무시"에 대한 답변에는 스키마 업데이트에서 엔터티를 무시할 수 있는 3가지 유효한 옵션이 있습니다.
스키마_필터
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
anddoctrine:schema:update
schema_ignore_class
그러나 데이터베이스 내에서 엔터티 생성을 피하려면 Ernesto의 답변에 있는 링크에서 해당 항목을 찾을 수 있습니다.
으아악Doctrine 2.7 버전에서만 작동합니다. 여기에서 전체 예를 찾을 수 있습니다. 스키마 관리자 업데이트 실행 시 Doctrine2 엔터티 무시
교리 마이그레이션 사용
데이터베이스 변경을 수행하려면
doctrine:migration:diff
thendoctrine:migration:migrate
instead ofdoctrine:schema:update
를 사용하는 것이 좋습니다. 로컬 개발자에게는 괜찮지만 프로덕션 환경에서는 매우 나쁜 습관입니다.https://symfony.com/bundles/DoctrineMigrationsBundle/current/index.html