Laravel по-русски

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

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

#1 12.08.2016 11:30:40

PostgreSQL - could not find driver

День добрый.

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". Да, прописаны, иначе бы обычное соединение из приведенного примера не работало бы.

Изменено Toxa (12.08.2016 11:37:01)

Не в сети

#2 12.08.2016 11:42:00

Re: PostgreSQL - could not find driver

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

Не в сети

#3 12.08.2016 11:47:36

Re: PostgreSQL - could not find driver

php5-pgsql модуль установлен?

Не в сети

#4 12.08.2016 11:50:20

Re: PostgreSQL - could not find driver

в линуксе смотри в /etc/php5/mods-available файл pgsql.ini + pdo_pgsql.ini
либо php -m в консоли

Не в сети

#5 12.08.2016 11:51:20

Re: PostgreSQL - could not find driver

Toxa пишет:

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

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

Не в сети

#6 12.08.2016 14:06:10

Re: PostgreSQL - could not find driver

hzone пишет:

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

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

Не в сети

#7 14.08.2016 22:30:29

Re: PostgreSQL - could not find driver

  1. Да, прописаны, иначе бы обычное соединение из приведенного примера не работало бы.
  2. Но остаётся невыясненным вопрос — почему обычное соединение работает и без этого, а ларавеловское — нет?

Потому что Laravel использует PDO, а pg_connect() это другое расширение PHP, а не PDO. Тоже самое с MySQL. Драйвер для PDO — это pdo_mysql, и кроме него есть mysql, mysqli и mysqlnd и всё это разные расширения. У Postgres это pgsql и pdo_pgsql. PDO не будет работать, если включен только pdo_pgsql, и наоборот.

hzone, если нечего сказать по теме — не надо ничего говорить, так поступают умные люди.

Не в сети

#8 15.08.2016 00:22:59

Re: PostgreSQL - could not find driver

Proger_XP пишет:

**hzone**, если нечего сказать по теме - не надо ничего говорить, так поступают умные люди.

Я ПО ТЕМЕ ВСЁ СКАЗАЛ И УКАЗАЛ ДОСТАТОЧНО ЧЁТКО, КУДА ИСКАТЬ.

Не в сети

#9 15.08.2016 10:25:51

Re: PostgreSQL - could not find driver

  1. Я ПО ТЕМЕ ВСЁ СКАЗАЛ И УКАЗАЛ ДОСТАТОЧНО ЧЁТКО, КУДА ИСКАТЬ.

Верно, сказал. А потом не удержался и показал, какой ты умный, а ТС тупой.

Не в сети

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