PommBundle类型和请求

时间:2017-07-11 10:22:08

标签: postgresql symfony orm project pomm

我有关于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 
        ";

1 个答案:

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