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);
}