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.
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).
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:
** Sie können auf "php.ini-development" und "php.ini-production" verzichten (diese Dateien müssen nicht unkommentiert werden).
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 .
Sie müssen DB-Änderungen in vornehmen
und andere Einstellungen in
Wenn Sie immer noch Fehler erhalten, löschen Sie Cache und Konfiguration
php artisan cache:clear
php artisan config:clear
Es sollte jetzt funktionieren!
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.
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.