PommBundle Тип и запрос

У меня есть вопрос о Pommbundle для Symfony

В моем pgsqlServer у меня есть тип денег Что является эквивалентом для сопоставления poombundle? Можно дать мне документ для определения типа строки в pommbundle?

Если я хочу использовать функцию agregat в sql (min, sum), можно ли использовать проекцию? или я могу использовать этот метод:

$sql ="select 
       min("Tarif"."MontantTTC") as "Prix", "Article"."SousFamille" as "ID"
       from "Tarif" 
       inner join "Article" ON "Tarif"."ID" = "Article"."Tarif" 
        where 
            "Article"."SousFamille" IN (?,?,?,?,?)  Group by "Article"."SousFamille" order by "Article"."SousFamille" ASC 
        ";

1 ответ

В Pomm нет конвертера, потому что тип денег не рекомендуется и не должен использоваться в новых разработках, см. Эту ветку для большего количества объяснений. Его поддержка в Postgres оставлена ​​по причинам обратной совместимости. Вместо этого следует использовать цифру или целое число (если возможно, в центах).

Если у вас нет выбора, потому что, используя существующую базу данных с этим типом, вы можете написать свой собственный конвертер (см. ConverterInterface) Имейте в виду, что этот тип вывода зависит от lc_monetary переменная окружения. Это может быть установлено так же, как формат даты установлен в конструкторе сеансов вашего проекта.

При этом следует избегать использования заглавных букв в именах столбцов и таблиц, это разрушает сопоставление с классами PHP.

Вы должны использовать проекцию в менеджере моделей, чтобы система гидратации знала, как преобразовать значения обратно.

function getMinPriceFor(array $families): CollectionIterator
{
    $sql = <<<SQL
SELECT {projection} 
FROM "Article" a
  INNER JOIN "Tarif" t ON t."ID" = a."Tarif" 
WHERE {condition}
GROUP BY a."SousFamille"
ORDER BY a."SousFamille" ASC
SQL;

    $projection = $this->createProjection()
        ->setField('prix', 'min(t."MontantTTC")', 'numeric');
    $condition = Where::createWhereIn('a."SousFamille"', $families);
    $sql = strtr(
        $sql,
        [
            '{projection}'  => $projection->formatFieldsWithFieldAlias('a'),
            '{condition}'   => $condition,
        ]);

    return $this->query($sql, $condition->getValues(), $projection);
}
Другие вопросы по тегам