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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 !

+ 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