2017-10-16 18 views
0

내 데이터베이스와 해당 엔티티에 대한 뷰를 만들었습니다. 모두가 잘 작동하는 것 같다하지만 난symfony 3 doctrine schema_filter not working

PHP 빈/콘솔 교리를 실행할 때마다 : 스키마를 다음과 같이 DB를

그것을 매핑이 괜찮 말해 것입니다 확인 있지만 :

[데이터베이스] FAIL - 데이터베이스 스키마가 현재 매핑 파일과 동기화되지 않았습니다.

위로 올려 보면 유효성 검사에서 테이블을 필터링하기 위해 DBAL을 구성 할 수 있습니다.

이것은 내가 config.yml (아래 코드의 마지막 줄을 확인)에서 시도한 것입니다. 의도는 유효성 검사에서 "view"로 시작하는 이름의 테이블을 제외하는 것입니다.

doctrine: 
dbal: 
    default_connection: default 
    connections: 
     default:  
      driver: pdo_mysql 
      host: '%database_host%' 
      port: '%database_port%' 
      dbname: '%database_name%' 
      user: '%database_user%' 
      password: '%database_password%' 
      charset: utf8mb4 
      default_table_options: 
       charset: utf8mb4 
       collate: utf8mb4_unicode_ci 
      schema_filter: ~^(?!view_)~ 

그래서,이 documentation에 따라, schema_filter은을 필터링해야하지만, 그렇지 않습니다.

나는 this

모든 아이디어를 포함하여 몇 가지 다른 질문을 확인? 감사합니다.

답변

0

메시지는 매핑이 데이터베이스 스키마와 같지 않다는 것을 알려줍니다. 데이터베이스 스키마를 업데이트해야합니다. Symfony3 명령 이 명령은 매우 강력하다, 사실

php bin/console doctrine:schema:update --force 

입니다. 그것은 당신의 데이터베이스가 실제로 어떻게 보이는지에 (당신의 엔티티의 매핑 정보를 기반으로) 어떻게 보일지를 비교하고 실행이 있어야 할 곳에에 대한 데이터베이스 스키마를 업데이트하는 데 필요한 SQL 문

당신 또한 변경 데이터베이스 스키마없이 실행해야하는 SQL을 보려면

php bin/console doctrine:schema:update --dump-sql 

을 사용할 수 있습니다.

실행할 때

php bin/console doctrine:schema:validate 

교리가 당신의 매핑 파일을 확인하고 괜찮위한 것입니다. 그러면 스키마가 검사됩니다. 그 순간에 당신의 매개 변수 schema_filter보기로 시작하는 이름을 데이터베이스의 모든 테이블을 무시하는 교리를 이야기하지만, 당신의 매핑 파일에 테이블 이름 보기 ...와 실체를 존재하고 그것을 위해 당신이 오류

을 받고 [데이터베이스] FAIL - 데이터베이스 스키마가 현재 매핑 파일과 동기화되지 않았습니다.

따라서 schema_filter은 데이터베이스의 테이블을 무시하고 엔티티를 무시하지 말 것을 Doctrine에 지시하는 데 사용됩니다.

schema_filter 당신이 당신의 파일이 테이블 매핑 실체가없는, custom_ 로 시작하는 이름으로 데이터베이스에 사용자 정의 테이블이 필요하고 호출하는 경우

php bin/console doctrine:migrations:diff 
상황을 상상 사용할 때 참조하십시오

이 설정 파일에서 당신의 경우를 제외하고, 모든 사용자 정의 테이블을 드롭 할 것은 사용자 정의 테이블을 무시하는 교리를 말해 매개 변수를 설정 한 경우

schema_filter: ~^(?!custom_)~ 

을 확인하시기 바랍니다 당신은 할 수있다

+0

감사합니다. @circleandsquare. 스키마를 업데이트하는 방법을 알고 있습니다. 이 문제는 그다지 중요하지 않지만 symfony가 db를 확인/업데이트 할 때마다 뷰를 고려하지 않도록하는 방법입니다. 구성에 schema_filter를 포함 시키면 그렇게되었지만 그렇게하지는 않았습니다. 그래서 심포니는 뷰와 같은 이름의 테이블을 생성하려고 시도하고, 물론 에러를 발생시킵니다. – BernardA

+0

위의 구성에서 볼 수 있듯이 schema_filter 지시문을 이미 포함했으며 작동하지 않습니다. 즉, db에 대한 뷰를 필터링하지 않습니다. 또한이 질문을 썼을 때 교리 이주를 사용하지 않았습니다. 설치했지만 다른 문제가 발생합니다. 이 질문보기 https://stackoverflow.com/questions/46825774/how-set-up-symfony-3-doctrine-migrations-with-multiple-db?noredirect=1&lq=1 – BernardA

+0

나는 그저 스키마 필터 올바르게 작동합니다. 스키마 필터는 엔티티를 무시하지 않으며 문제를 해결하지 못합니다. symfony는 엔티티를 제외하는 명령을 제공하지 않으므로 다른 엔티티 관리자를보기 용으로, 다른 엔티티 관리자를 다른 엔티티 용으로 정의 할 수 있습니다. – circleandsquare