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

Doctrine2 PHP Discussion :

Ajout de type (blob)


Sujet :

Doctrine2 PHP

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2011
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 107
    Par défaut Ajout de type (blob)
    Bonjour,

    je doit ajouter un type dans doctrine (blob) alors sur la doc :
    Chapitre 4.6. Custom Mapping Types :
    http://www.doctrine-project.org/docs...c-mapping.html

    j'ai fait le début pas de soucis mais je ne comprend pas ou je doit ajouter l'enregistrement du type (dans le bootstrap d'après ce site https://gist.github.com/525030/38a0d...46457dd37a5f58)
    mais je n'ai pas de bootstrap.php

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2011
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 107
    Par défaut
    C'est bon j'ai trouvé :

    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
     
    <?php
    namespace My\ProjectBundle\Types;
     
    use Doctrine\DBAL\Platforms\AbstractPlatform;
    use Doctrine\DBAL\Types\Type;
     
    class Blob extends Type
    {
        const BLOB = 'blob';
     
        public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
        {
            return $platform->getDoctrineTypeMapping('BLOB');
        }
     
        public function convertToDatabaseValue($value, AbstractPlatform $platform)
        {
            return ($value === null) ? null : base64_encode($value);
        }
     
        public function convertToPHPValue($value, AbstractPlatform $platform)
        {
            return ($value === null) ? null : base64_decode($value);
        }
     
        public function getName()
        {
            return self::BLOB;
        }
    }
    et l'enregistrement :

    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
     
    <?php
     
    namespace My\ProjectBundle;
     
    use Symfony\Component\HttpKernel\Bundle\Bundle;
     
    use Doctrine\ORM\EntityManager;
    use Doctrine\DBAL\Types\Type;
     
    class MyProjectBundle extends Bundle
    {
        public function boot() {
            Type::addType('blob', 'My\ProjectBundle\Types\Blob');
            $em = $this->container->get('doctrine.orm.default_entity_manager');
            $conn = $em->getConnection();
            $conn->getDatabasePlatform()->registerDoctrineTypeMapping('BLOB', 'blob');
        }
    }

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2011
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 107
    Par défaut
    Je ré ouvre ce sujet car ça fonctionne bien mais avec les test unitaires j'ai une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Doctrine\DBAL\DBALException: Type blob already exists
    Sauf que de base il n'existe pas donc voila je prévient juste je cherche la solution...

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Par défaut
    Essaie de voir si c'est pas parce qu'il execute 2 fois ta method boot ?

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2011
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 107
    Par défaut
    C'est exactement ça, la solution est donc :
    Dans le boot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public function boot() {
            $blobTest = Type::getTypesMap();
            if(!isset($blobTest['blob'])){
                Type::addType('blob', 'My\ProjectBundle\Types\Blob');
                $em = $this->container->get('doctrine.orm.default_entity_manager');
                $conn = $em->getConnection();
                $conn->getDatabasePlatform()->registerDoctrineTypeMapping('BLOB', 'blob');
            }
        }

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Par défaut
    Ou mieux : if (!Type::hasType('blob')) {

    En tout cas c'est bon a savoir !

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2011
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 107
    Par défaut
    Autre petite information qui peut être utile si vous avez plusieurs EntityManager (par exemple pour les tests unitaire) il faut le charger pour chaque une d'elle.
    Par exemple moi ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if(!Type::hasType('blob')){
                Type::addType('blob', 'My\ProjectBundle\Types\Blob');
                $em = $this->container->get('doctrine.orm.default_entity_manager');
                $conn = $em->getConnection();
                $conn->getDatabasePlatform()->registerDoctrineTypeMapping('BLOB', 'blob');
     
                $emTest = $this->container->get('doctrine.orm.test_entity_manager');
                $connTest = $emTest->getConnection();
                $connTest->getDatabasePlatform()->registerDoctrineTypeMapping('BLOB', 'blob');
            }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème quand le champs de type Blob est null
    Par med_anis_dk dans le forum JDBC
    Réponses: 6
    Dernier message: 12/05/2007, 01h34
  2. Lister des images de types blob en jsp
    Par biba158 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 07/05/2007, 13h41
  3. comparer deux adodb.field de type blob(adbinary)
    Par cakeke dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 30/11/2005, 13h24
  4. Problème avec le type BLOB dans oracle
    Par pguedia dans le forum Oracle
    Réponses: 1
    Dernier message: 10/11/2005, 17h33
  5. Comment Enregistrer un champ type BLOB avec Query ???
    Par baba dans le forum Bases de données
    Réponses: 3
    Dernier message: 11/01/2005, 20h33

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