11
votes

Type personnalisé de la doctrine modifiant toujours la table

J'ai ajouté un type personnalisé comme: xxx pré>

et dans mon démarrage de l'application: p> xxx pré>

Cependant chaque fois i Mettez à jour la base de données avec: p> xxx pré>

Je continue à obtenir ce qui suit: p>

ALTER TABLE product_price CHANGE price price DECIMAL(10,2) DEFAULT NULL


2 commentaires

On dirait qu'il y a un bug Doctrine-Project.org/jira/Browse/...


J'ai fermé la question comme incomplète car ce n'était pas reproductible.


4 Réponses :


3
votes

Vous ne dites pas la plate-forme DBAL sur votre type, donc évidemment, les utilitaires introspections de schéma Dbal ne peuvent pas la reconnaître. Pour enregistrer le type, vous pouvez le faire suivant:

use Doctrine\DBAL\Types\Type;
use My\SuperBundle\Types\Money;

class MyBSuperBundle extends Bundle
{
    public function boot()
    {
        /* @var $em \Doctrine\ORM\EntityManager */
        $entityManager = $this->container->get('doctrine.orm.entity_manager');

        if( ! Type::hasType(Money::MONEY)) {
            Type::addType(Money::MONEY, 'My\SuperBundle\Types\Money');
            $entityManager
                ->getConnection()
                ->getDatabasePlatform()
                ->registerDoctrineTypeMapping('decimal', Money::MONEY);
        }
    }
}


8 commentaires

-> registreDoctrineTypapping ("décimal", argent :: argent); Ou -> registerdoctrinetypapping ('décimal (10,2)', argent :: argent); ?


Il devrait être sans paramétrisation spécifique.


Merci de votre aide. Malheureusement, ça n'a pas fait l'affaire. J'ai 3 types (argent, poids et quantité) tous résultent de la décimale (10,2) pourraient-il être le cas? À la section de démarrage, j'ai déclaré tout comme décimal que vous avez suggéré


Avez-vous envisagé d'utiliser le type numérique intégré à la place?


Vous voulez dire au lieu d'utiliser décimal ou au lieu d'utiliser des types personnalisés?


Au lieu d'utiliser des types personnalisés.


Je voudrais l'éviter, car il est probable que les spécifications pour l'argent, la quantité et les champs de poids changent plus tôt ou tard.


On dirait que j'ai manqué "Vous ne pouvez que mapper un type de base de données à un type de doctrine exactement. Les fournisseurs de base de données permettant de définir des types personnalisés tels que PostgreSQL peuvent aider à surmonter ce problème." de docs.doctrine -project.org/projects/doctrine-dbal/fr/latest/... donc pas de types personnalisés pour l'instant :(



4
votes

1 commentaires

Merci! Juste une note que si vous n'utilisez pas la section "Connections", vous pouvez mettre l'entrée "Mapping_Types" directement dans la section "Dbal".



13
votes

Vous devez remplacer la méthode requisseSQLCommentHint (abstractplatform $ plateforme) et retourner true . Comme ça, la doctrine se souviendra du type personnalisé. xxx

source: Utilisez la colonne Commentaires pour une doctrine supplémentaire Type Inference


0 commentaires

1
votes

J'ai eu le même problème avec zf2.

J'ai résolu Supprimer l'union d'union forte> dans mon nom de type personnalisé. P>

faux: p>

'doctrine_type_mappings' => [
    'customtype' => 'customtype'
],


0 commentaires