【问题标题】:Error updating schema in postgres with Doctrine ORM in Symfony在 Symfony 中使用 Doctrine ORM 更新 postgres 中的模式时出错
【发布时间】:2018-12-01 04:24:24
【问题描述】:

我正在更新 Symfony 应用程序中的架构。这个应用不是我写的,所以我在摸索。

我已经用php bin/console doctrine:schema:validate 验证了架构,并获得了OK,映射是正确的。但是数据库架构不同步(我实际上是从一个空数据库开始...)

然后我运行bin/console doctrine:schema:update --force,得到以下错误:

SQLSTATE[22023]:无效参数值:7 错误:NUMERIC 小数位数 10 必须介于 0 和精度 2 之间

第 1 行:...ULL,application_id VARCHAR(255) NOT NULL,数量 NUMERIC(2,...

ServiceFee 类中:

/**
 * @ORM\Column(type="decimal", precision=2, scale=10)
 */
private $amount;

以及相关的SQL命令(用bin/console doctrine:schema:update --dump-sql检索):

CREATE TABLE service_fees (
    id INT NOT NULL,
    created TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL,
    modified TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL,
    uuid VARCHAR(255) NOT NULL,
    organization_id VARCHAR(255) NOT NULL,
    application_id VARCHAR(255) NOT NULL,
    amount NUMERIC(2, 10) NOT NULL,
    charged BOOLEAN NOT NULL,
    payment_method_type VARCHAR(255) NOT NULL,
    transaction_number VARCHAR(255) NOT NULL,
    removed BOOLEAN NOT NULL,
    PRIMARY KEY(id)
);
CREATE UNIQUE INDEX unique_uuid ON service_fees (uuid);

执行上述命令后,我开始收到一个新错误,但我不确定这是否是架构更新不完整的结果:

SQLSTATE[42703]:未定义列:7 错误:列“min_value”不存在

第 1 行:从“translations_id_seq”中选择 min_value、increment_by

【问题讨论】:

    标签: php postgresql symfony doctrine-orm schema


    【解决方案1】:

    您对NUMERIC 列的定义是错误的。来自 PostgreSQL 文档:

    数字的刻度是小数部分中小数位数的计数,在小数点右侧。数值的精度是整数中有效位数的总和,即小数点两边的位数。所以数字 23.5141 的精度为 6,小数位数为 4。整数可以认为小数位数为零。

    来源:https://www.postgresql.org/docs/10/static/datatype-numeric.html#DATATYPE-NUMERIC-DECIMAL

    【讨论】:

    • 这是正确的,我相信原始编码器颠倒了精度和比例。换句话说,他们希望允许像 11111111.99、NUMERIC(10, 2) 这样的数字,而不是相反。旁注,我认为应该颠倒文档段落以反映参数顺序。
    • 是的,先谈精度再谈规模会更直观。无论如何,Doctrine 可能会在您的情况下发出警告,它会为您节省一些时间:)
    • 我向 postgres 文档站点提交了更改文档的请求。感谢您的帮助
    猜你喜欢
    • 2022-01-11
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多