<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><
フラグ
readOnly=true
でマークされたエンティティは、更新について追跡されなくなりましたが、ドキュメント で説明されているように、行の挿入または削除は引き続き可能です。doctrine:schema:update
質問への回答コマンドでは、引き続きテーブルを考慮してスキーマを更新します。
「スキーマ マネージャー更新の実行時に Doctrine2 エンティティを無視する」 スキーマ更新でエンティティを無視するための有効なオプションは 3 つあります。
スキーマ_フィルター
schema_filter
はエンティティを「フィルタリング」するために作成されたものではなく、教義認識から DB テーブルをフィルタリングするために作成されました。これは例です:
リーリーview_booking_by_customer_per_year
というカスタムの生の PHP cron ジョブから更新されるテーブルを手動で作成すると仮定すると、このテーブルはプロジェクト内のコードでは使用されませんが、データ分析に使用されます。
これは典型的な例ですが、スキーマを更新するたびにこのようなクエリを生成する必要はありません。したがって、
schema_filterを使用すると、検証および更新プロセスでこのテーブルを無視するように Doctrine に指示できます。
を使用してみてください。生の SQL を使用してランダム テーブルを作成し、
doctrine:schema:validateデータベースが同期していません
およびエラーが表示されます。 schema_filter に入れると、エラーは発生しなくなります。
これは
doctrine:migration:diffdoctrine:schema:update
ただし、データベース内でエンティティを生成したくない場合は、Ernesto の回答のリンクからそれを見つけることができます:で機能します
schema_ignore_class
リーリー
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