2017-04-14 92 views
1

我在我的數據庫表中有一個名爲service_3_total的字段,其類型爲decimal(10,2)。我已經在我的遷移中將此設置爲nullable()字段,所以在我的數據庫中爲空=是和默認= NULL。Laravel無法將空值插入可空數據庫字段

如果我提交我的表單時將該字段留空我得到以下錯誤:

General error: 1366 Incorrect decimal value: '' for column 'service_3_total'

我不知道,因爲我已經允許這一領域是數據庫中的空爲什麼我得到這個。我認爲這與它是一種十進制數據類型有關。

任何想法?

+1

你可能會傳遞錯誤的數據類型的成列。謹慎分享一些代碼? – TurtleTread

+0

沒有數據,該字段爲空,因爲我沒有在該字段中插入值。當我檢查在這裏提交的表單數據是我得到的那個字段:'「service_3_total」=>「」' – user3574492

回答

3

在你的評論指出變量插入值是:

"service_3_total" => "" 

空字符串== NULL

你傳遞一個空字符串,而不是空,所以MySQL是示數出試圖把這個「」分解成一個數字。

像這樣的東西可以在你的代碼中工作。只需在插入前添加它即可。 (請根據您的用例,它更優雅,這只是爲了不誤工作)

if (!$data['service_3_total']) { 
    $data['service_3_total'] = null; 
} 

當你現在試試這個,MySQL將正確識別了一個空值,並輸入它作爲這樣的DB,空白字符串不起作用。

+0

Ofcourse,good old''「vs null' – user3574492

-1

「service_3_total」=>「」。如果將列值設置爲空字符串並傳遞整個數組以執行,則會出現錯誤,因爲空字符串是字符串類型,不等於NULL。您應該取消該數組中的此鍵以使SQL執行默認設置。

0
class YourModel extends Model 
{ 
    protected static function boot() 
    { 
     static::creating(function ($model) { 
      $model->service_3_total = empty($model->service_3_total) ? null : $model->service_3_total ; 
     }); 

     static::updating(function ($model) { 
      $model->service_3_total = empty($model->service_3_total) ? null : $model->service_3_total ; 
     }); 
    } 

} 

您可以使用函數來創建/更新之前blank值轉換爲null模型內,以防止周圍控制器搞亂,讓我們model管理數據