2014-03-26 46 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函数这样的值始终为空或值

谢谢!