検索

ホームページ  >  に質問  >  本文

Symfony 5 - Doctrine の schema_filter が正しく動作しない

<p>プロジェクトでコマンド ライン <code>doctrine:schema:update --force</code> を実行するとき、次のような 2 つのエンティティを無視しようとします。 <pre class="brush:php;toolbar:false;">/*** @ORM\Entity(readOnly=true) * @ORM\Table(name="view_tableau_de_bord")*/ クラス ViewTableauDeBord { //... }</pre> <p>私の doctrine.yaml 設定ファイル: </p> <pre class="brush:php;toolbar:false;">教義: dbal: デフォルト接続: デフォルト 接続: デフォルト: URL: '%env(resolve:DATABASE_URL)%' ドライバー: 'pdo_pgsql' サーバーのバージョン: '12' 文字セット:utf8 スキーマフィルター: ~^(?!view_)~ # ...</pre> <p>Doctrine はすべてのエンティティを生成し続け、私のビューは <code>schema_filter</code> にあります。これについてはどう説明されますか?プロジェクトでこのオプションを使用するのはこれが初めてです。 </p> <p>プロジェクト設定: </p>
P粉002023326P粉002023326458日前539

全員に返信(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 cron ジョブから更新されるテーブルを手動で作成すると仮定すると、このテーブルはプロジェクト内のコードでは使用されませんが、データ分析に使用されます。 これは典型的な例ですが、スキーマを更新するたびにこのようなクエリを生成する必要はありません。

    リーリー

    したがって、

    schema_filter

    を使用すると、検証および更新プロセスでこのテーブルを無視するように Doctrine に指示できます。 生の SQL を使用してランダム テーブルを作成し、doctrine:schema:validate

    を使用してみてください。

    データベースが同期していません エラーが表示されます。 schema_filter に入れると、エラーは発生しなくなります。 これは doctrine:migration:diff

    および

    doctrine:schema:update で機能します schema_ignore_class

    ただし、データベース内でエンティティを生成したくない場合は、Ernesto の回答のリンクからそれを見つけることができます:

    リーリー

    Doctrine 2.7 バージョンでのみ動作します。 完全な例はここにあります:

    Schema Manager update の実行時に Doctrine2 エンティティを無視する

    Doctrine Migration を使用する

    データベースの変更を実行するには、

    doctrine:schema:update

    の代わりに

    doctrine:migration:diff を使用し、次に doctrine:migration:merge を使用することを強くお勧めします。ローカル開発では問題ありませんが、運用環境では非常に悪い習慣です。 https://symfony.com/bundles/DoctrineMigrationsBundle/current/index.html

    返事
    0
  • キャンセル返事