Symfony 5 - Doctrine の schema_filter が正しく動作しない
P粉002023326
P粉002023326 2023-08-26 18:16:28
0
2
485
<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>
    <li>Symfony 5.4.14</li> <li>PHP 7.4.26</li> <li>ドクトリン: orm: 2.13.3</li> <li>理論/メモ: 1.13.3</li>
  • doctrine/doctrine パッケージ: 2.7.0
  • <li>doctrine/doctrine 移行パッケージ: 3.2.2</li>
  • symfony/doctrine-bridge:5.4.14
  • <li>理論/データデバイス: 1.5.3</li> </ul><

P粉002023326
P粉002023326

全員に返信(2)
P粉186897465

フラグ readOnly=true でマークされたエンティティは、更新について追跡されなくなりましたが、ドキュメント で説明されているように、行の挿入または削除は引き続き可能です。

doctrine:schema:update コマンドでは、引き続きテーブルを考慮してスキーマを更新します。

質問への回答

「スキーマ マネージャー更新の実行時に Doctrine2 エンティティを無視する」 スキーマ更新でエンティティを無視するための有効なオプションは 3 つあります。

いいねを押す +0
P粉455093123

スキーマ_フィルター

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
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!