web-dev-qa-db-fra.com

Laravel 5 avec Postgresql

Je travaille sur Laravel 5 avec Postgres comme base de données. J'ai configuré Postgres 9.4 et pgAdmin III et ceux-ci fonctionnent normalement. Lorsque j'essaie d'exécuter la migration, cela me donne une erreur: 

[PDOException]
impossible de trouver le pilote

Ceci est mon database.php

'default' => 'pgsql',

'pgsql' => [            'driver'   => 'pgsql',          
                        'Host'     => '127.0.0.1',          
                        'database' => 'fms',            
                        'username' => 'postgres',           
                        'password' => 'root',           
                        'charset'  => 'utf8',           
                        'prefix'   => '',           
                        'schema'   => 'public',         ],

Initialement, je pensais que c’était dû à la configuration de postgres sous Windows 7, mais j’ai essayé avec php, ça marche parfaitement 

<?php
   $Host        = "Host=127.0.0.1";
   $port        = "port=5432";
   $dbname      = "dbname=fms";

   $db = pg_connect( "$Host $port $dbname user=postgres password=root"  );
   if(!$db){
      echo "Error : Unable to open database\n";
   } else {
      echo "Opened database successfully\n";
   }
?>

J'ai activé php_pgsql et php_pdo_sql dans wamp également. Je ne sais pas comment résoudre ce problème sur Laravel 5.

14
Moyed Ansari

Comme vous l'avez dit, vous avez déjà choisi la base de données par défaut comme Postgres SQL

'default' => 'pgsql',

Il est impératif que vous deviez supprimer le commentaire de l’objet partagé pdo et postgres dans vos paramètres de configuration php (php.ini)

c'est-à-dire, vous devez supprimer les commentaires suivants dans votre php.ini

extension=pdo_pgsql.so
extension=pgsql.so

Remarque :  

N'oubliez pas d'arrêter et de démarrer votre Apache après avoir modifié ces modifications (ou php-fpm si vous l'utilisez à la place).

27

J'ai eu le même problème avec Laravel-WAMP-PostgreSql driver not found exception. J'ai même réussi à établir une connexion directe avec Postgre, comme vous l'avez fait, mais sans succès avec la commande "php artisan migrate". 

Après de longues recherches, j'ai découvert qu'il existe plusieurs fichiers php.ini dans lesquels "extension = php_pdo_pgsql.dll" et "extension = php_pgsql.dll" apparaissent.

La solution est (bien sûr) de désactiver les extensions dans les fichiers suivants:

  • ~/wamp/bin/php/php5.5. */php.ini
  • ~/wamp/bin/php/php5.5. */phpForApache
  • ~/wamp/bin/php/php5.5. */php.ini.install
  • ~/wamp/bin/php/php5.5. */php.ini-development 
  • ~/wamp/bin/php/php5.5. */php.ini-production et
  • ~/wamp/bin/Apache/apache2.4.9/php.ini

** Vous pouvez laisser de côté "php.ini-development" et "php.ini-production" (vous n'avez pas besoin de mettre ces commentaires en attente).

4
anchor

Comme @jeff a dit, cela est probablement dû à la non définition de DB_CONNECTION=pgsql dans le fichier .env-. MySQL est préconfiguré dans le fichier .env-, vous donc devez éditer ce fichier.

1
rinderwahn

Vous devez apporter des modifications liées à la base de données dans

  1. config/database.php
  2. fichier .env

et d'autres paramètres dans

  • paramètres php.ini

Si l'erreur persiste, effacez le cache et la configuration.

php artisan cache:clear
php artisan config:clear

Cela devrait fonctionner maintenant!

1
Ravistm

vous devez modifier le fichier .env, puis aller à config> database.php et changer le fichier par défaut en pgsql, et dans tous les fichiers de votre modèle, vous devez modifier $ protected $ connection = 'pgsql'. 

0
Jeff