2016-10-06 5 views
1

Я запускаю CakePhp 2.7 с плагином Migrations и DB Postgresql. Создание поля типа 'number' и задающей длины 15,4 (масштаб 15, точность 4 - или любая длина) фактически не создает поле с этой точностью и/или масштабом.CakePHP Migrations - Как указать масштаб и точность

  ... 
'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 

Я также попытался с помощью «типа» => «десятичной», но то же самое произошло. Возможно, это не поддерживается плагином миграции, но я просто хочу знать, знает ли кто-нибудь, что происходит.

+1

Я боюсь, что 2.x плагин не может быть и никогда не станет достаточно мощным, чтобы поддержать всех тех, кто случаев. В плагине 3.x Migrations все это исправлено по дизайну. Вы можете переключиться сюда. Я только что опубликовал сообщение о том, как использовать 3.x Migrations в приложениях 2.x (http://www.dereuromark.de/2016/10/03/use-3-x-migrations-for-your-2 -x-cakephp-приложение). – mark

ответ

1

После дальнейшего расследования и некоторой помощи от Cake Development Corp. Оказывается, что правильный путь указывает точность и масштаб, используя «ограничение», а не «длину», как я пытался. Так оно и должно быть, как это:

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

Это будет работать также при использовании «типа» => «десятичную», который на самом деле тот же тип данных. Конечный результат такой, как ожидалось:

license_fee    | numeric(15,6) | default 0 

Надеюсь, это полезно для кого-то.

1

Найдено здесь: http://docs.phinx.org/en/latest/migrations.html

Для того, чтобы создать: десятичный (9,3)

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

Этот ответ не относится к фреймворку CakePHP, который я использую. – atomCode

+0

Это правильный ответ для CakePHP 3.5 и MySQL. Принятый ответ не сработал для меня. –

+0

Это действительно правильный ответ. Обратите внимание, что точность и масштаб должны быть целыми числами вместо строк. – jurrieb

Смежные вопросы