未使用create()插入NULL值

时间:2017-02-21 06:30:43

标签: php laravel

我有以下形式的字段:

 <label>Office Phone:</label><br>
 <input type="number" name="office_phone"  value="{{ old('office_phone') }}" class="form-control"><br>
    @if ($errors->has('office_phone'))
               <span class="help-block">
                      <strong>{{ $errors->first('office_phone') }}</strong>
               </span>
    @endif

这不是必填字段。如果没有给出任何输入,它应该在数据库中插入Null值。

我有这个验证规则:

  'office_phone'=>'integer',

并创建()方法:

return User::create([
   'office_phone'=>$data['office_phone]

但如果没有给出输入,则不插入Null值:它给出错误:

  

日期时间格式无效:1366整数值不正确:''列   'office_phone'在第1行

但是如果office_phone有一些值,那么插入就好了。我做错了什么?

office_phone in database has Type int(10) default NULL and Null yes

2 个答案:

答案 0 :(得分:1)

如果您没有输入数据,那么您的值将为空"" != NULL。因此,如果value为空,则将其替换为null。试试这个:(在return User::create()之前)

$data['office_phone'] = $data['office_phone'] === ""?NULL:$data['office_phone'];

答案 1 :(得分:1)

在你的情况下,没有值时会发生什么,然后传递空字符串'',这是MYSQL中的空值。所以它抛出了这个错误,因为整数列这样的值是不允许的,但对varchar来说很好。

所以你有两个选择:

  • 更改mysql以将默认值设置为0
  • 检查PHP端是否为空发送NULL或0到DB。

更多参考资料: Insert empty string into INT column for SQL Server

How to allow empty string for integer in MySQL?