Utiliser une base de données postgres avec symfony3
Nous sommes à la rétro-ingénierie d'une application web à l'aide d'une base de données postgres. Nous voulons de refactoriser le code à l'aide du framework symfony, mais nous sommes confrontés à un problème pour utiliser la base de données.
Pour le moment, notre projet est de travailler avec une base de données MySQL en utilisant simplement la même structure pour les tables utilisées. Le problème est que, maintenant, nous avons besoin d'utiliser la base de données postgresql, car il y a beaucoup de données et il n'est pas vraiment adapté à MySQL autant que nous le sachions.
Nous avons fait beaucoup de recherche, mais nous n'avons pas réussi à créer une base de données postgresql dans le projet symfony.
Tout d'abord, nous avons essayé d'appliquer ce tutoriel : http://www.tutodidacte.com/symfony2-utiliser-une-base-de-donnee-postgresql nous l'avons adapté autant que possible pour notre projet.
Voici notre config.yml
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: services.yml }
# Put parameters here that don't need to change on each machine where the app is deployed
# http://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
parameters:
locale: en
framework:
#esi: ~
#translator: { fallbacks: ["%locale%"] }
secret: "%secret%"
router:
resource: "%kernel.root_dir%/config/routing.yml"
strict_requirements: ~
form: ~
csrf_protection: ~
validation: { enable_annotations: true }
#serializer: { enable_annotations: true }
templating:
engines: ['twig']
default_locale: "%locale%"
trusted_hosts: ~
trusted_proxies: ~
session:
# http://symfony.com/doc/current/reference/configuration/framework.html#handler-id
handler_id: session.handler.native_file
save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%"
fragments: ~
http_method_override: true
assets: ~
# Twig Configuration
twig:
debug: "%kernel.debug%"
strict_variables: "%kernel.debug%"
# Doctrine Configuration
doctrine:
dbal:
default_connection: default
connections:
#Mysql
default:
driver: pdo_mysql
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
#Postgresql
pgsql:
driver: pdo_pgsql
host: localhost
port: 5432
dbname: "%psql_database_name%"
user: root
password: "%psql_database_password%"
charset: UTF8
#mapping_types:
#geometry: string
orm:
default_entity_manager: default
auto_generate_proxy_classes: "%kernel.debug%"
#naming_strategy: doctrine.orm.naming_strategy.underscore
#auto_mapping: true
entity_managers:
default:
connection: default
# lister les Bundles utilisant la connexion par defaut
#mappings:
#monprojetmysqlBundle: ~
#tutoUserBundle: ~
pgsql:
connection: pgsql # connection name for your additional DB
# bundles utilisant la connexion Postgresql
#mappings:
# PostgresqlBundle: ~
# Swiftmailer Configuration
swiftmailer:
transport: "%mailer_transport%"
host: "%mailer_host%"
username: "%mailer_user%"
password: "%mailer_password%"
spool: { type: memory }
mais lorsque nous avons lancé cette commande : php bin/console doctrine:database:create --connexion=pgsql nous avons eu cette réponse :
[Doctrine\DBAL\Exception\DriverException]
An exception occured in driver: could not find driver
[Doctrine\DBAL\Driver\PDOException]
could not find driver
[PDOException]
could not find driver
doctrine:database:create [--connection [CONNECTION]] [--if-not-exists] [-h|--help] [-q|--quiet] [-v|vv|vvv|--verbose] [-V|--version] [--ansi] [--no-ansi] [-n|--no-interaction] [-e|--env ENV] [--no-debug] [--] <command>
Il semble que nous n'avons pas le module pdo_pgsql nous avons donc cherché comment l'installer.
Le faire, nous avons appliqué le script proposé sur cette page github : https://gist.github.com/doole/8651341#file-install_psql_php-sh
Nous avons changé la version de postgres.application à 9.5.
Après quelques tâtonnements, nous avons finalement réussi à avoir pdo_pgsql sur le résultat de php -m.
Mais le savez, nous avons cette réponse lorsqu'on lance la commande : php bin/console doctrine:database:create --connexion=pgsql
PHP Warning: PHP Startup: pdo_pgsql: Unable to initialize module
Module compiled with module API=20131226
PHP compiled with module API=20121212
These options need to match
in Unknown on line 0
PHP Warning: PHP Startup: pgsql: Unable to initialize module
Module compiled with module API=20131226
PHP compiled with module API=20121212
These options need to match
in Unknown on line 0
[Doctrine\DBAL\Exception\DriverException]
An exception occured in driver: could not find driver
[Doctrine\DBAL\Driver\PDOException]
could not find driver
[PDOException]
could not find driver
doctrine:database:create [--connection [CONNECTION]] [--if-not-exists] [-h|--help] [-q|--quiet] [-v|vv|vvv|--verbose] [-V|--version] [--ansi] [--no-ansi] [-n|--no-interaction] [-e|--env ENV] [--no-debug] [--] <command>
Nous avons essayé de faire ceci : Installation de PHP avec Postgresql sur MAC à l'aide de homebrew
mais ça n'a rien changé. Maintenant, nous avons 5 de PHP AVERTISSEMENT pour pdo_pgsql et pgsql lorsque nous lançons la commande php bin/console doctrine:database:create --connexion=pgsql
Nous avons aussi vu :
Comment faire pour modifier une base de données postgresql avec Symfony 2.0? et ce : Comment créer 2 connexions (mysql et postgresql) avec Doctrine2 dans Symfony2 mais il n'a pas vraiment d'aide parce que la première préoccupation de debian, et nous travaillons sur OS X El Capitan et le second n'en disent pas plus que le précédent tutoriel.
Enfin, le seul espoir que nous avons, c'est que quelqu'un peut nous aider...
Je vous remercie à l'avance.
WARNING for pdo_pgsql
dire? Avez-vous vérifier que vous avez correctement installé le pdo-pgsql module (en regardant la phpinfo()
de sortie - être au courant que le php-config peut varier en fonction de la CLI et le Serveur)?PHP Warning: PHP Startup: pdo_pgsql: Unable to initialize module Module compiled with module API=20131226 PHP compiled with module API=20121212 These options need to match in Unknown on line 0 PHP Warning: PHP Startup: pgsql: Unable to initialize module Module compiled with module API=20131226 PHP compiled with module API=20121212 These options need to match in Unknown on line 0
C'est toujours le même avertissement, mais nous avons 5 fois de suite. J'ai trouvé que, avec toute la commande que j'ai utilisé, j'ai réinstaller php et maintenant j'ai 2 php.ini. Je vais essayer de tout supprimer complètement et réinstaller php avec
brew install php56 --with-postgresql
Il a travaillé. J'ai supprimer tous les fichiers php et de le réinstaller avec le brassage et maintenant ça fonctionne. Je vais être plus précis au cours de la journée. Merci fateddy
Heureux que vous ayez pu le comprendre!
OriginalL'auteur MarcoD | 2016-03-16
Vous devez vous connecter pour publier un commentaire.
Enfin, je l'ai corrigé en supprimant tous les fichiers qui gèrent php et de réinstaller php avec homebrew.
---- Suppression de php ----
Tout d'abord, j'ai utilisé la commande suivante à partir de la racine (
cd /
) pour trouver tous les fichiers commençant par "php"Fonction des résultats (vous pourriez avoir beaucoup), supprimer tous les fichiers qui doivent être supprimés (à ce stade, c'est votre jugement). Par exemple, j'ai supprimé les fichiers dans /usr/local et /usr/bin, mais pas dans /Applications /ou Homebrew.
Exemples :
Parfois, vous pouvez avoir une erreur "autorisation refusée" même avec sudo mais elle n'a pas de problème à la fin.
---- Réinstallation de php ----
Une fois tout ce qui concerne le php est supprimé, vous pouvez le réinstaller à l'aide de la ligne de commande suivante :
Si vous avez un "libz pas trouvé d'erreur", il faut lancer la commande suivante :
et de relancer l'installation avec :
Si tout s'est bien passé, vous n'aurez qu'à définir le champ
date.timezone
en php.ini et vous aurez de nouveaux système php. Vous pouvez vérifier que vous disposez de la pdo_pgsql module installé à l'aide de cette ligne de commande :php -m
.---- Se connecter à votre base de données pour votre projet symfony ----
D'abord, vous devez modifier le fichier app/config/parameters.yml dans votre projet en ajoutant le code suivant :
Les champs host et le port peuvent être différents, mais ces deux sont les valeurs par défaut de symfony et une base de données postgres.
Ensuite, vous devez modifier le fichier app/config/config.yml à la Doctrine niveau de la Configuration de cette façon :
C'est un exemple, vous pouvez l'adapter comme vous le souhaitez.
Maintenant, vous pouvez vous connecter à votre base de données pour votre projet avec cette ligne de commande :
Si vous disposez déjà d'entités dans votre répertoire src/AppBundle/de l'Entité, vous pouvez créer vos tables avec :
Tout doit être ok maintenant. J'espère que cela aidera quelqu'un d'autre qui fait face à ce genre de problèmes.
OriginalL'auteur MarcoD