2017-10-13 47 views
0

当保存我的表单时,它会正确保存所有内容,但如果表单中的值为空白,则即使该列设置为允许空值,它也将无法保存。保存模型时,MySQL/Laravel处理空值

因此,让它工作的唯一方法似乎是检查值是否存在,否则手动将其设置为空(见下文)。

$model = \Blah\Model::where(blahblah)->first; 
$model->value = $value ? $value : null; 
$model->save(); 

我不得不这样做虽然也只是因为如果值为0(零),将它设置为null,因为PHP的方式解释条件语句的问题。

我不想为每个模型中的每个值都做这件事。那么是否有办法使它正确处理空值,以便如果该字段为空,则会将空值保存到该列的模型中,而不是给我一个错误?

所以基本上有一种方法来正确处理SQL/Eloquent中的空值,将保持0值,如果它是空白,正确保存空值?

编辑:生成的查询

General error: 1366 Incorrect integer value: '' for column 'Strength' at row 1 (SQL: update `playerstats` set `Strength` = where `id` = 1) 
+1

@ccloyed提laravel版本好吗? –

+1

如果保存失败,日志文件中的错误消息是什么?并请展示您的模型! – Webdesigner

+0

请提供生成的SQL。 –

回答

0

下面的代码,您应该使用:

$model = \Blah\Model::where(blahblah)->first; 

if($modal->value == "0") { 
    $model->value = 0; 
} 
else{ 
    $model->value = NULL; 
} 
$model->save(); 
+0

是的,我可以做到这一点。但主要的问题是我不想在if语句中包含所有的值,因为随着页面的增长它将超过100列。我宁愿弄清楚如何让数据库实体正确地将零解释为零,将(NULLstr)解释为空。 – cclloyd

+0

@cclloyd:尝试将您的列数据类型更改为“VARCHAR”。 –

0

让您的手机型号nullable

value列,并使用$model->value = isset($value) ? $value : null;