Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 5.x » PostgreSQL - could not find driver » 12.08.2016 14:06:10

hzone пишет:

не надо домыслов, в области, в которой не компетентен.

Ты такой умный. Тебе череп не жмёт?

#2 Re: Laravel 5.x » PostgreSQL - could not find driver » 12.08.2016 11:42:00

Победил. Видимо, апач ленился поискать в путях клиентскую dll-ку постгреса. Скопировал libpg.dll в apache/bin - всё заработало.
Но остаётся невыясненным вопрос - почему обычное соединение работает и без этого, а ларавеловское - нет?

#3 Laravel 5.x » PostgreSQL - could not find driver » 12.08.2016 11:30:40

Toxa
Ответов: 8

День добрый.

Laravel почему-то не дружит с PostrgeSQL. Что характерно - обычное соединение вполне себе бодро работает.

Настройка Laravel (то, что касается pg):

database.php

    'default' => env('DB_CONNECTION', 'pgsql'),
    'connections' => [
        'pgsql' => [
            'driver' => 'pgsql',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '5432'),
            'database' => env('DB_DATABASE', 'laravelTest'),
            'username' => env('DB_USERNAME', 'postgres'),
            'password' => env('DB_PASSWORD', 'root'),
            'charset' => 'utf8',
            'prefix' => '',
            'schema' => 'public',
        ],
    ],

.env

DB_CONNECTION=pgsql
DB_HOST=localhost
DB_PORT=5432
DB_DATABASE=laravelTest
DB_USERNAME=postgres
DB_PASSWORD=root

Обычное соединение (данные отдаются):

$db = pg_connect('host=localhost port=5432 dbname=laravelTest user=postgres password=root');
$a = pg_query_params($db, 'select * from USERS where ID = $1', array(1));
while($r = pg_fetch_object($a)) print_r($r);

Laravel при обращении к БД пишет "could not find driver". Код (взят из примера):

    $prod = new Product();
    $prod->caption = $request->caption;
    $prod->save();

Ответ:

PDOException in Connector.php line 55: could not find driver

Стек:

1. in Connector.php line 55
2. at PDO->__construct('pgsql:host=localhost;dbname=laravelTest;port=5432', 'postgres', 'root', array('0', '2', '0', false)) in Connector.php line 55
3. at Connector->createConnection('pgsql:host=localhost;dbname=laravelTest;port=5432', array('driver' => 'pgsql', 'host' => 'localhost', 'port' => '5432', 'database' => 'laravelTest', 'username' => 'postgres', 'password' => 'root', 'charset' => 'utf8', 'prefix' => '', 'schema' => 'public', 'name' => 'pgsql'), array('0', '2', '0', false)) in PostgresConnector.php line 36
4. at PostgresConnector->connect(array('driver' => 'pgsql', 'host' => 'localhost', 'port' => '5432', 'database' => 'laravelTest', 'username' => 'postgres', 'password' => 'root', 'charset' => 'utf8', 'prefix' => '', 'schema' => 'public', 'name' => 'pgsql')) in ConnectionFactory.php line 61

Там еще далее есть, но, IMHO, это уже не важно.

Ради интереса делал вот так:

    $A = DB::select('select * from USERS');
    print_r($A);
    exit;

Примерно тот же ответ - ErrorException in Connector.php line 55: could not find driver (View: C:\projects\laravelTest\resources\views\layouts\app.blade.php) (View: C:\projects\laravelTest\resources\views\layouts\app.blade.php)

Использую Apache 2.2, PHP 5.6.4, PostgreSQL 9.3

Внимание, вопрос. Как всё-таки подружить Laravel с PostgreSQL? Не "На какую СУБД перейти", и не "Как развернуть Homestead", а именно "Как подружить Laravel с PostgreSQL".

P.S. Google пытаю со вчерашнего обеда, все советы сводятся к "проверь, прописан ли php_pdo_pgsql и php_pgsql в php.ini". Да, прописаны, иначе бы обычное соединение из приведенного примера не работало бы.

Подвал раздела