CakePHP迁移-如何指定小数位数和精度

xggvc2p6  于 2022-11-11  发布在  PHP
关注(0)|答案(3)|浏览(162)

我运行的是带有迁移插件和Postgresql数据库的CakePhp 2.7。创建一个类型为“number”的字段并指定长度为15,4(小数位数为15,精度为4 -或任意长度)实际上并不会创建具有该精度和/或小数位数的字段。

...
 'license_fee' => array(
   'type' => 'number',
   'null' => true,
   'length' => '15,6',
   'default' => 0
  ),
        ...

创建的字段具有正确的类型(数字),但没有小数位数/精度。以下是所创建字段的Postgres描述。

license_fee               | numeric | default 0

我想看到的是

license_fee               | numeric(15,6) | default 0

我也试过使用'type' =〉'decimal',但同样的事情发生了。这可能不支持的迁移插件,但我只是想知道,如果有人知道肯定是怎么回事。

cdmah0mi

cdmah0mi1#

在此找到:http://docs.phinx.org/en/latest/migrations.html
为了创建:十进制(9,3)

$table->addColumn('distance', 'decimal', [
            'default' => null,
            'null' => false,
            'precision'=>9,
            'scale'=>3
        ]);
bhmjp9jg

bhmjp9jg2#

经过进一步的调查和Cake Development Corp.的帮助,我们发现指定精度和小数位数的正确方法是使用“limit”,而不是像我尝试的那样使用“length”。因此,应该是这样的:

'license_fee' => array(
   'type' => 'number',
   'null' => true,
   'limit' => '15,6', //this is where I was wrong by using length
   'default' => 0
),

如果使用'type' =〉'decimal',这也是可以的,因为它实际上是相同的数据类型。

license_fee               | numeric(15,6) | default 0

我希望这对某人有用。

zpqajqem

zpqajqem3#

对于3.10版本:

$table->addColumn('name', ['type' => 'decimal', 'length' => 10, 'precision' => 3])

在/vendor/cakephp/cakephp/src/Database/Schema/TableSchema. php中,是可以在列中使用的有效键:

$_columnKeys = [
    'type' => null,
    'baseType' => null,
    'length' => null,
    'precision' => null,
    'null' => null,
    'default' => null,
    'comment' => null,
];

相关问题