IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Contrainte supprime champ en base de données


Sujet :

Symfony PHP

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut Contrainte supprime champ en base de données
    Bonjour,

    Dès que j'applique des contraintes de validation sur des attributs de classe entité et que je fais une migration, les champs correspondants sont supprimés en base de données.

    Exemple ave mon entité "Advert":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ...
    use Symfony\Component\Validator\Constraints as Assert;
    ...
        /**
         * @ORM\OneToOne(targetEntity="App\Entity\Vehicle", inversedBy="advert", cascade={"persist", "remove"})
         * @ORM\JoinColumn(nullable=false)
         */
        /**
         * @Assert\Type(type="App\Entity\Vehicle")
         * @Assert\Valid
         */
        private $vehicle;
    ...
    Après migration, le champ "vehicle_id" a été supprimé de ma table "advert".

    Si je drop ma base de données et que je la recrée (annotation incluses), voici ce que j'obtiens cimme fichier de migration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <?php declare(strict_types=1);
     
    namespace DoctrineMigrations;
     
    use Doctrine\DBAL\Schema\Schema;
    use Doctrine\Migrations\AbstractMigration;
     
    /**
     * Auto-generated Migration: Please modify to your needs!
     */
    final class Version20190104142743 extends AbstractMigration
    {
        public function up(Schema $schema) : void
        {
            // this up() migration is auto-generated, please modify it to your needs
            $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.');
     
            $this->addSql('CREATE TABLE advert (id INT AUTO_INCREMENT NOT NULL, vehicle_id INT NOT NULL, description LONGTEXT DEFAULT NULL, created_at DATETIME NOT NULL, updated_at DATETIME DEFAULT NULL, expires_at DATETIME NOT NULL, UNIQUE INDEX UNIQ_54F1F40B545317D1 (vehicle_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB');
            $this->addSql('CREATE TABLE fuel (id INT AUTO_INCREMENT NOT NULL, fuel VARCHAR(255) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB');
            $this->addSql('CREATE TABLE mark (id INT AUTO_INCREMENT NOT NULL, mark VARCHAR(255) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB');
            $this->addSql('CREATE TABLE photo (id INT AUTO_INCREMENT NOT NULL, advert_id INT DEFAULT NULL, name VARCHAR(255) NOT NULL, extension VARCHAR(255) NOT NULL, INDEX IDX_14B78418D07ECCB6 (advert_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB');
            $this->addSql('CREATE TABLE sort (id INT AUTO_INCREMENT NOT NULL, sort VARCHAR(255) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB');
            $this->addSql('CREATE TABLE vehicle (id INT AUTO_INCREMENT NOT NULL, sort_id INT NOT NULL, fuel_id INT NOT NULL, mark_id INT NOT NULL, manufacture_date DATETIME NOT NULL, INDEX IDX_1B80E48647013001 (sort_id), INDEX IDX_1B80E48697C79677 (fuel_id), INDEX IDX_1B80E4864290F12B (mark_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB');
            $this->addSql('ALTER TABLE advert ADD CONSTRAINT FK_54F1F40B545317D1 FOREIGN KEY (vehicle_id) REFERENCES vehicle (id)');
            $this->addSql('ALTER TABLE photo ADD CONSTRAINT FK_14B78418D07ECCB6 FOREIGN KEY (advert_id) REFERENCES advert (id)');
            $this->addSql('ALTER TABLE vehicle ADD CONSTRAINT FK_1B80E48647013001 FOREIGN KEY (sort_id) REFERENCES sort (id)');
            $this->addSql('ALTER TABLE vehicle ADD CONSTRAINT FK_1B80E48697C79677 FOREIGN KEY (fuel_id) REFERENCES fuel (id)');
            $this->addSql('ALTER TABLE vehicle ADD CONSTRAINT FK_1B80E4864290F12B FOREIGN KEY (mark_id) REFERENCES mark (id)');
        }
     
        public function down(Schema $schema) : void
        {
            // this down() migration is auto-generated, please modify it to your needs
            $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.');
     
            $this->addSql('ALTER TABLE photo DROP FOREIGN KEY FK_14B78418D07ECCB6');
            $this->addSql('ALTER TABLE vehicle DROP FOREIGN KEY FK_1B80E48697C79677');
            $this->addSql('ALTER TABLE vehicle DROP FOREIGN KEY FK_1B80E4864290F12B');
            $this->addSql('ALTER TABLE vehicle DROP FOREIGN KEY FK_1B80E48647013001');
            $this->addSql('ALTER TABLE advert DROP FOREIGN KEY FK_54F1F40B545317D1');
            $this->addSql('DROP TABLE advert');
            $this->addSql('DROP TABLE fuel');
            $this->addSql('DROP TABLE mark');
            $this->addSql('DROP TABLE photo');
            $this->addSql('DROP TABLE sort');
            $this->addSql('DROP TABLE vehicle');
        }
    }
    J'ai beau faire des recherches, je ne trouve rien par rapport à cela.

    Quelqu'un aurait une idée?

    Edit :

    J'ai l'impression que ça vient d'une configuration quelconque. J'ai donc relu la documentation concernant les validations et j'ai ajouté ceci dans le fichier framework.yaml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     # config/packages/framework.yaml
    framework :
        validation : { enable_annotations : true }
    Ca n'a rien chnagé...

    Merci d'avance.

  2. #2
    Membre extrêmement actif
    Avatar de Sodium
    Femme Profil pro
    Développeuse web
    Inscrit en
    Avril 2014
    Messages
    2 324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeuse web

    Informations forums :
    Inscription : Avril 2014
    Messages : 2 324
    Points : 2 013
    Points
    2 013
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /**
         * @ORM\OneToOne(targetEntity="App\Entity\Vehicle", inversedBy="advert", cascade={"persist", "remove"})
         * @ORM\JoinColumn(nullable=false)
         */
        /**
         * @Assert\Type(type="App\Entity\Vehicle")
         * @Assert\Valid
         */
        private $vehicle;
    Tu as deux blocs de commentaires pour ta variable (deux /**), à mon avis seul le second est pris en compte et la relation entre les deux tables ne se fait pas. Essaye en changeant comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    /**
         * @ORM\OneToOne(targetEntity="App\Entity\Vehicle", inversedBy="advert", cascade={"persist", "remove"})
         * @ORM\JoinColumn(nullable=false)
         *
         * @Assert\Type(type="App\Entity\Vehicle")
         * @Assert\Valid
         */
        private $vehicle;

Discussions similaires

  1. champ de Base de données
    Par Michel85 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 03/06/2008, 10h31
  2. contraintes entre tables de base de données
    Par Romantic_a dans le forum Windows Forms
    Réponses: 2
    Dernier message: 13/05/2008, 15h02
  3. nom bouton=champs dans base de données
    Par lg022 dans le forum VB.NET
    Réponses: 5
    Dernier message: 30/04/2008, 07h56
  4. [MySQL] Image pour supprimer dans une base de données
    Par fabpeden dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 18/07/2007, 15h21
  5. Réponses: 2
    Dernier message: 08/06/2006, 17h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo