Maison > Questions et réponses > le corps du texte
P粉1868974652023-08-27 17:01:05
Une entité marquée du drapeau readOnly=true
n'est plus suivie pour les mises à jour mais il est toujours possible d'insérer ou de supprimer des lignes, comme expliqué dans la documentation.
La commande doctrine:schema:update
prendra quand même en compte la table pour mettre à jour le schéma.
Dans la réponse à la question "Ignorer les entités Doctrine2 lors de l'exécution de la mise à jour du gestionnaire de schéma" il existe 3 options valides pour ignorer les entités dans les mises à jour de schéma.
P粉4550931232023-08-27 14:04:02
schema_filter
n'est pas fait pour "filtrer" l'entité mais pour filtrer la table de base de données de la conscience de la doctrine.
Voici un exemple :
En supposant que vous créez manuellement une table mise à jour à partir d'une tâche cronphp brute personnalisée appelée view_booking_by_customer_per_year
, cette table n'est pas utilisée par votre code dans votre projet mais est utilisée pour l'analyse des données.
C'est un exemple typique, vous ne souhaitez pas générer une telle requête à chaque fois que vous mettez à jour le schéma.
DROP TABLE view_booking_by_customer_per_year; // NO I DONT WANT THIS
Ainsi, en utilisant schema_filter
, vous pouvez dire à la doctrine d'ignorer ce tableau dans son processus de validation et de mise à jour.
Essayez de créer une table aléatoire en utilisant du SQL brut et utilisez doctrine:schema:validate
.
Il affichera une erreur database is not in sync
.
Une fois que je l'ai mis dans schema_filter, l'erreur ne se produit plus.
Ça marche pour doctrine:migration:diff
and doctrine:schema:update
Cependant, si vous souhaitez éviter de générer des entités dans la base de données, vous pouvez le trouver à partir du lien dans la réponse d'Ernesto :
schema_ignore_classes: - Reference\To\My\Class - Reference\To\My\OtherClass
Fonctionne uniquement à partir de la version Doctrine 2.7. Vous pouvez trouver l'exemple complet ici : Ignorer les entités Doctrine2 lors de l'exécution de la mise à jour de Schema Manager
Je vous conseille fortement d'utiliser doctrine:migration:diff
then doctrine:migration:migrate
instead of doctrine:schema:update
pour effectuer des modifications sur la base de données. C'est ok pour les développeurs locaux, mais en production, c'est une très mauvaise pratique.
https://symfony.com/bundles/DoctrineMigrationsBundle/current/index.html