Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
День добрый.
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)
Не в сети
Победил. Видимо, апач ленился поискать в путях клиентскую dll-ку постгреса. Скопировал libpg.dll в apache/bin - всё заработало.
Но остаётся невыясненным вопрос - почему обычное соединение работает и без этого, а ларавеловское - нет?
Не в сети
php5-pgsql модуль установлен?
Не в сети
в линуксе смотри в /etc/php5/mods-available файл pgsql.ini + pdo_pgsql.ini
либо php -m в консоли
Не в сети
Победил. Видимо, апач ленился поискать в путях клиентскую dll-ку постгреса. Скопировал libpg.dll в apache/bin - всё заработало.
Но остаётся невыясненным вопрос - почему обычное соединение работает и без этого, а ларавеловское - нет?
не надо домыслов, в области, в которой не компетентен.
Не в сети
не надо домыслов, в области, в которой не компетентен.
Ты такой умный. Тебе череп не жмёт?
Не в сети
- Да, прописаны, иначе бы обычное соединение из приведенного примера не работало бы.
- Но остаётся невыясненным вопрос — почему обычное соединение работает и без этого, а ларавеловское — нет?
Потому что Laravel использует PDO, а pg_connect() это другое расширение PHP, а не PDO. Тоже самое с MySQL. Драйвер для PDO — это pdo_mysql, и кроме него есть mysql, mysqli и mysqlnd и всё это разные расширения. У Postgres это pgsql и pdo_pgsql. PDO не будет работать, если включен только pdo_pgsql, и наоборот.
hzone, если нечего сказать по теме — не надо ничего говорить, так поступают умные люди.
Не в сети
**hzone**, если нечего сказать по теме - не надо ничего говорить, так поступают умные люди.
Я ПО ТЕМЕ ВСЁ СКАЗАЛ И УКАЗАЛ ДОСТАТОЧНО ЧЁТКО, КУДА ИСКАТЬ.
Не в сети
Не в сети
Страницы 1