2014-03-26 45 views
0

當使用ORM像這樣在Laravel 4生成元素:Laravel插入空值Postgress錯誤

FigureModel::create(array('numericFieldOne'=>1, 'numericFieldTwo'=> null)); 
FigureModel::create(array('numericFieldOne'=>1, 'numericFieldTwo'=> '')); 

在MySQL一切都很好,所有的項目都是完美inserterd,到目前爲止,沒有任何問題: enter image description here

但是在postgress中,它會嘗試插入空值而不會引起報文發送崩潰。像這樣:

enter image description here

怎麼辦?有沒有人有關於如何解決這個問題的想法?謝謝!!

(和定製的setter方法對每個元素驗證它是一個數字或null不是一個選項)

+0

尊敬的理查德, 對不起,我的截圖已經讓你放心,生病就像你從現在開始建議的那樣。但是,期待即時通訊試圖讓每個人的生活更加艱難,這是你想象中的一小部分! –

回答

0

看來Laravel的調試屏幕欺騙了你:如果查詢確實是,Postgres的錯誤會syntax error at or near ","與SQL狀態42601

問題是,postgres不接受''(空字符串)作爲一個整數的有效表示。的0

使用一個,'0',如:

FigureModel::create(array('worldwideoffices' => 1, 'worldwideemployees' => 0)); 
FigureModel::create(array('worldwideoffices' => 1, 'worldwideemployees' => '0')); 

,但最好使用null如果它更有意義。

注意:如果你從另一個源插入數據,只是用鑄造整數在PHP中:

FigureModel::create(array(
    'worldwideoffices' => (int) $offices, 
    'worldwideemployees' => (int) $employees, 
)); 
+0

我真的沒有看到他的第一條命令'FigureModel :: create(array('worldwideoffices'=> 1,'worldwideemployees'=> null));'和Laravel/Postgres應該接受null如果該列可以爲null 。 –

+0

@AntonioCarlosRibeiro這就是爲什麼我寫*但最好使用null如果它更有意義* - 但有些情況下,當它有所作爲(f.ex.'null'意味着N/A - 沒有意義,但是'0'意味着有意義,但零) – pozs

1

@pozs謝謝!因爲你指出正確的錯誤應該是42601 im再一次知道該ORM的prostgress適配器是健全的。

解決辦法: 對我來說,我只是在數據庫中有這樣的事情

public function setNumericFieldAttribute($var){ 
    $this->attributes['numericField'] = empty($var) ? null : $var; 
} 

爲所有人創造數字空值setter函數這樣的值始終爲空或值

謝謝!