2017-10-16 8 views
0

私は自分のdbとそれに対応するエンティティについてビューを作成しました。スキーマ:次のようにsymfony 3 doctrine schema_filter not working

を検証することは、デシベルマッピングは罰金であることを教えてではなくなります。

を私は

PHPのbin /コンソール教義を実行するたびにすべてが正常に動作するようですが、

[データベース] 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文

ますあなたが実行する必要があるが、データベーススキームを変更することなく参照するには、

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

を使用することもできます。

あなたが実行すると

php bin/console doctrine:schema:validate 

Doctrineがマッピングファイルをチェックして、あなたは大丈夫ですのためになります。 その後、スキーマがチェックされます。その瞬間、あなたのパラメータschema_filterビューで始まる名前のデータベース内のすべてのテーブルを無視するように教義を教えてくれますが、あなたのマッピングファイル内のテーブル名ビュー...で実体を存在し、そのためにあなたがエラー

を取得します[Database] FAIL - データベーススキーマが現在のマッピングファイルと同期していません。

したがって、schema_filterは、データベース内のテーブルを無視し、エンティティを無視しないようにDoctrineに指示するために使用されます。

schema_filterはあなたのファイルで、あなたがこのテーブルにマップされたエンティティを持っていない、 custom_ で始まる名前を持つデータベースにカスタムテーブルを必要とし、あなたが呼び出す場合

php bin/console doctrine:migrations:diff 
状況を想像して使用する際に参照するために、

これは、あなたの設定ファイルにカスタムテーブルを無視して、あなたはパラメータ

schema_filter: ~^(?!custom_)~ 

を設定した場合を確認してくださいことを行うことができます教義を教えている場合を除いて、すべてのカスタムテーブルをドロップします

+0

ありがとう@circleandsquare。私はスキーマを更新する方法を知っています。この問題はそうではありませんが、dbを検証/更新するたびにsymfonyがビューを考慮しないようにする方法です。設定にschema_filterを含めることはそれを行うはずだったが、そうではなかった。 symfonyはビューと同じ名前のテーブルを作成しようとしますが、もちろんエラーが発生します。 – 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はエンティティを除外するコマンドを提供しないため、ビュー用に2つの異なるエンティティマネージャを定義し、他のエンティティ用に2つ目のエンティティマネージャを定義できます。 – circleandsquare