我有关于Pommbundle for symfony的问题
在我的pgsqlServer中,我有一个钱类型 poombundle映射的等价物是什么? 可以给我一个pommbundle中定义的类型行的文档吗?
如果我想在sql(min,sum)中使用agregat函数,可以使用投影吗?或者我可以使用这种方法:
$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
";
答案 0 :(得分:0)
Pomm中没有转换器,因为不鼓励使用货币类型,不应在新开发中使用,请参阅this thread以获取更多解释。它在Postgres中的支持是出于向后兼容的原因。应该使用数字或整数(如果可能的话,以美分计)。
如果因为使用此类型的现有数据库而别无选择,则可以编写自己的转换器(请参阅ConverterInterface
)注意this type输出取决于lc_monetary
环境变量。这可以在项目的会话构建器中以date format is set的相同方式设置。
这就是说,你应该避免在你的专栏中使用大写字母。表名,这破坏了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);
}