2016-10-06 9 views
1

我正在CakePhp 2.7遷移插件和Postgresql數據庫。 創建類型爲「number」的字段並指定長度15,4(比例15,精度4或任何長度)實際上並不會創建具有該精度和/或比例的字段。CakePHP遷移 - 如何指定比例和精度

  ... 
'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插件中,這全部由設計決定。你可能想切換到這裏。我剛剛在[如何在2.x應用程序中使用3.x遷移]發佈了一篇文章(http://www.dereuromark.de/2016/10/03/use-3-x-migrations-for-your-2順便說一句,-x-cakephp-app)。 – mark

回答

1

經過進一步調查和蛋糕開發公司的一些幫助。事實證明,正確的方式指定精度和規模是通過使用「限制」而不是「長度」像我試圖。所以它應該是這樣的:

'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 

我希望這對某人有用。

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