wake-up-neo.com

Laravel 5 mit Postgresql

Ich arbeite an Laravel 5 mit Postgres als Datenbank. Ich habe Postgres 9.4 und pgAdmin III konfiguriert und diese funktionieren normal. Wenn ich versuche, die Migration auszuführen, gibt es einen Fehler: 

[PDOException]
Treiber konnte nicht gefunden werden

Dies ist meine Datenbank.php

'default' => 'pgsql',

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

Anfangs dachte ich, es war aufgrund der Konfiguration von Postgres unter Windows 7, aber ich versuchte es mit normalem PHP, es funktioniert perfekt 

<?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";
   }
?>

Ich habe auch php_pgsql und php_pdo_sql in wamp aktiviert. Ich bin nicht sicher, wie ich das auf Laravel 5 beheben kann.

14
Moyed Ansari

Wie Sie sagten, haben Sie Default Database bereits als Postgres SQL ausgewählt

'default' => 'pgsql',

Es ist ein Muss, dass Sie das gemeinsame Objekt pdo und postgres in Ihren PHP-Konfigurationseinstellungen unkommentieren müssen. (php.ini)

sie müssen die folgenden Zeilen in Ihrer php.ini auskommentieren

extension=pdo_pgsql.so
extension=pgsql.so

Hinweis :  

Vergessen Sie nicht, Ihre Apache anzuhalten und zu starten, nachdem Sie diese Änderungen vorgenommen haben (oder php-fpm, wenn Sie stattdessen diese verwenden).

27

Ich hatte das gleiche Problem mit dem Laravel-WAMP-PostgreSql-Treiber, der keine Ausnahme gefunden hat. Ich habe sogar erfolgreich eine direkte Verbindung zu Postgre aufgebaut, wie Sie es getan haben, aber mit dem Befehl "php artisan migrate" kein Glück. 

Nach langer Recherche fand ich heraus, dass es mehrere php.ini-Dateien gibt, in denen "extension = php_pdo_pgsql.dll" und "extension = php_pgsql.dll" auskommentiert werden.

Die Lösung besteht darin (natürlich), die Erweiterungen in den folgenden Dateien zu vermeiden:

  • ~/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-Entwicklung 
  • ~/wamp/bin/php/php5.5. */php.ini-production und
  • ~/wamp/bin/Apache/apache2.4.9/php.ini

** Sie können auf "php.ini-development" und "php.ini-production" verzichten (diese Dateien müssen nicht unkommentiert werden).

4
anchor

Wie @jeff sagte, liegt dies wahrscheinlich daran, dass DB_CONNECTION=pgsql Nicht in der .env - Datei gesetzt wurde. Die .env - Datei hat MySQL vorkonfiguriert, daher müssen Sie diese Datei bearbeiten .

3
rinderwahn

Sie müssen DB-Änderungen in vornehmen

  1. config/database.php
  2. .env-Datei

und andere Einstellungen in

  • php.ini einstellungen

Wenn Sie immer noch Fehler erhalten, löschen Sie Cache und Konfiguration

php artisan cache:clear
php artisan config:clear

Es sollte jetzt funktionieren!

1
Ravistm

Führen Sie diesen Befehl aus, um die Zeilen extension = pdo_pgsql.so und extension = pgsql.so aus der Datei php.ini zu entfernen

sed -ri -e 's!;extension=pdo_pgsql!extension=pdo_pgsql!' $PHP_INI_DIR/php.ini

sed -ri -e 's!;extension=pgsql!extension=pgsql!' $PHP_INI_DIR/php.ini

Wenn Sie die Treiber noch nicht installiert haben oder der Fehler auftritt, dass die dynamische Bibliothek PGSQL nicht geladen werden kann, führen Sie Folgendes aus:

apt-get update && apt-get install -y libpq-dev && docker-php-ext-install pdo pgsql pdo_pgsql

Dadurch werden die Treiber pgsql und pdo_pgsql installiert.

0
Ash

sie müssen die .env-Datei ändern. Wechseln Sie dann zu config> database.php und ändern Sie den Standardwert in pgsql. Außerdem müssen Sie in Ihrer Modelldatei $ protected $ connection = 'pgsql' ändern. 

0
Jeff