база данных — Как я могу получить int4range из PostgreSQL в PHP?

У меня есть проблема конвертации в ядре PHP. Я попытался получить тип данных int4range (например, [-1, 10)) из базы данных PostgreSQL v.9.5.3, в PHP dibi / row (объект данных из успешного запроса), я получаю все данные правильно, но в поле с получением int4range Нулевое значение, а не NULL. Любая идея, как получить тип int4range в строку, или какой-либо другой формат числового диапазона более дружественным с PHP?

Спасибо за ответы.

КСТАТИ: Я могу использовать POMM (Postgres Object Model Manager), потому что это утилита является большой и трудной для установки, это кажется мне столь же инвазивным разрешением. Я должен найти некоторую нативную функцию в PHP, которая сделала это правильно.

0

Решение

Хорошо, я решаю свою проблему этим:

lower(bl.storeyrange) AS min_floor,
upper(bl.storeyrange) AS max_floor

Я разбил int4range на два целых числа, НО внимание! int4range — это дискретные диапазоны чисел, а верхнее значение из функции upper () выбирает верхнюю границу из диапазона, НО с этим [1,7)

ниже = 1

верхний = 7 !!! некорректный

верхняя должна быть 6, но верхняя функция не распознает его.

И это решение, не решающее проблему с преобразованием типов диапазонов строго в запросах.

0

Другие решения

Может быть, вы говорите о Pomm 1.x, который был утомительным для установки. Pomm 2.x Базовая библиотека (Foundation) небольшая и простая в установке:

$ composer.phar require "pomm-project/foundation"

И это все.

После того, как композитор сделал свое волшебство, ваш PHP-файл так же прост, как:

<?php

use PommProject\Foundation\Pomm;

$loader = require __DIR__ . '/vendor/autoload.php';

$pomm = new Pomm(
[
'my_db' =>
[
'dsn' => 'pgsql://user:pass@host:port/db_name'
]
]
);

$iterator = $pomm['my_db']
->getQueryManager()
->query('SELECT range_field, … ', ['parameter1', …])
;

if ($iterator->isEmpty()) {
printf("No results.\n");
} else {
foreach ($iterator as $row) {
printf(
"Range is from '%d' to '%d'.\n",
$row['range_field']->start_limit,
$row['range_field']->end_limit
);
}
}

Вы даже можете использовать диапазон в качестве параметра в своих SQL-запросах:

<?php
// …
use PommProject\Foundation\Converter\Type\NumRange;

$sql = <<<SQL
UPDATE my_table
SET …
WHERE int_field <@ $*::int4range
RETURNING field1, …
SQL;

$iterator = $pomm['my_db']
->getQueryManager()
->query($sql, [new NumRange('[1, 42)')])
;
if ($iterator->isEmpty()) {
printf("No rows updated.\n");
} else {
foreach ($iterator as $row) {
}
}

Если вы все еще считаете мой ответ неуместным, дайте мне знать, и я его удалю.

0

По вопросам рекламы [email protected]