Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 19-02-2013 10:13:18

adloiseau
Membre
Date d'inscription: 10-01-2013
Messages: 35

Create database

Bonjour,

Dans le cadre d'un projet, j'aimerais pouvoir créer une base de données à souhait. Quelle est la meilleure façon de procéder ? J'aimerais utiliser une fonction qui s'occupe de sa création (en fonction du type de driver selectionné, car j'utilise MySQL & PostgreSql)

J'ai trouvé dans la librairie de doctrine une fonction mais celle-ci est pour MySQL :
"doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php"

Code:

    public function getCreateDatabaseSQL($name)
    {
        return 'CREATE DATABASE ' . $name;
    }

Cette fonction existe aussi pour la librairie PostgreSQL (fichier PostgreSqlPlatform.php) mais j'aimerais ne pas à utiliser de switch case..

Merci par avance

Hors ligne

 

#2 19-02-2013 10:26:07

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Create database

Salut, ça sera pareil sur n'importe quel ORM il y a une couche d'abstraction au niveau applicatif. Normalement si tu regardes bien tu dois avoir une interface qui est implémenté par toutes les classes xxxPlatform.php et derrière l'implémentation est différente suivant le SGBD. L'ORM sélectionnera la bonne classe en fonction du drivers.

Pour ton problème tu n'as pas 36 solutions je pense. Tu peux faire une classe qui saura faire la différence entre les drivers utilisés et se chargera d'appeler la bonne classe suivant la base mais ça implique une notion de "switch".

Hors ligne

 

#3 19-02-2013 10:40:02

adloiseau
Membre
Date d'inscription: 10-01-2013
Messages: 35

Re: Create database

Donc si j'ai bien compris je fais une classe dans laquelle:
- Je cherche le driver utilisé
- Je fais un switch en fonction du driver utilisé, pour ensuite instancié soit MySQL à travers la fonction getCreateDatabaseSQL de la classe MySqlPlatform, soit PostgreSQL à travers la même fonction mais de la classe PostgreSqlPlatform ? Si oui je ne comprends pas l’intérêt de doctrine?

Merci

Hors ligne

 

#4 19-02-2013 11:59:18

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Create database

Explique mieux ton problème parce que là je pense que j'ai pas tout compris ... Normalement Doctrine fera la sélection tout seul en fonction du drivers que tu utilises mais c'est en rapport avec ta configuration et dans cette configuration tu lui passes les paramètres de la connexion à la base. Or toi si j'ai bien compris tu veux en créer une nouvelle donc je sais pas comment Doctrine peut savoir quel SGBD tu utilises puisque tu n'as pas de base de configuré.

Hors ligne

 

#5 19-02-2013 17:03:47

adloiseau
Membre
Date d'inscription: 10-01-2013
Messages: 35

Re: Create database

J'ai créé un module Installation, dans ce module l'utilisateur va remplir un formulaire qui va permettre de définir:
- le type de driver utilisé (MySQL ou PostgreSQL)
- les informations de connexions ( base de données, login, mot de pass)

En gros il va remplir ce tableau :

Code:

    'doctrine' => array(
        'connection' => array(
            'orm_default' => array(
                'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
                'params' => array(
                    'host'     => 'localhost',
                    'port'     => '3306',
                    'user'     => 'admin',
                    'password' => '',
                    'dbname'   => 'prompc',
                    'charset'  => 'utf8'
                )
            )
        )
    ),

Une fois les informations remplis, il faut que créer la base de données, et les entities.
Et c'est à ce niveau que je bloque.

Dernière modification par adloiseau (19-02-2013 17:04:20)

Hors ligne

 

#6 19-02-2013 17:07:03

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Create database

Ben normalement tu as le drivers à cet endroit donc tu sais quelle classe appeler. Je pense pas que l'EM ai accès à la création de base smile

Hors ligne

 

#7 19-02-2013 17:25:28

adloiseau
Membre
Date d'inscription: 10-01-2013
Messages: 35

Re: Create database

J'ai une classe qui me permet de créer mes entities, j'utilise la fonction create() de Doctrine/ORM/EntityManager :

Code:

use Zend\ServiceManager\ServiceLocatorAwareInterface,
    Zend\ServiceManager\ServiceLocatorInterface,
    Doctrine\ORM\EntityManager;

abstract class Entity implements ServiceLocatorAwareInterface, DirectInterface
{
    /**
     * @var EntityManager
     */
    protected $em;
    protected $services;

    public function setEntityManager(EntityManager $em) {
        $this->em = $em;
    }

    public function getEntityManager() {
        if(null === $this->em) {
            $this->em = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
        }
        return $this->em;
    }

    public function setServiceLocator(ServiceLocatorInterface $serviceLocator)
    {
        $this->services = $serviceLocator;
    }

    public function getServiceLocator()
    {
        return $this->services;
    }

    public function create($entity, $data) { ... };

mais pour la création de la base de données je ne sais pas j'ai trouvé la fonction getCreateDatabaseSQL($database) de la classe AbstractPlatform de Doctrine/DBAL

Dernière modification par adloiseau (19-02-2013 17:26:22)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages