Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 验证:如何设置不需要';空';输入为空时_Laravel_Laravel 4 - Fatal编程技术网

Laravel 验证:如何设置不需要';空';输入为空时

Laravel 验证:如何设置不需要';空';输入为空时,laravel,laravel-4,Laravel,Laravel 4,我有一个如下所示的验证规则: $rules = ['target' => 'numeric']; 这不是必填字段。如果在输入中未指定值(即input::get('target')=''),我希望在数据库中将该字段设置为NULL 目前,上述规则已通过,如果没有数字输入,则在数据库中将其设置为0 最好的解决方案是什么?我认为这不是laravel的问题,您必须添加标签mysql。。。 更改该表以添加Null作为默认值。。当前,如果您传递空值,它将添加0,因为默认情况下它不为NULL并显示 Wa

我有一个如下所示的验证规则:

$rules = ['target' => 'numeric'];
这不是必填字段。如果在输入中未指定值(即input::get('target')=''),我希望在数据库中将该字段设置为NULL

目前,上述规则已通过,如果没有数字输入,则在数据库中将其设置为0


最好的解决方案是什么?

我认为这不是laravel的问题,您必须添加标签mysql。。。 更改该表以添加Null作为默认值。。当前,如果您传递空值,它将添加0,因为默认情况下它不为NULL并显示

Warning: #1366 Incorrect integer value: '' for column 'target' at row 1. 
下面是要更改的查询

ALTER TABLE `table` CHANGE `target` `target` INT( 11 ) NULL

运行上述查询后,
target
将接受空值而不是0

在调用
save()
之前,只需将
null
值赋给相应的模型属性,就可以在Laravel中将字段设置为
null

但如果您想在多个模型中插入空值,可以创建基础模型并由所有其他模型继承

class BaseModel extends Eloquent {

    public static function boot()
    {
        parent::boot();

        static::creating(function($model) {

            static::setNullWhenEmpty($model);
            return true;

        });
    }

    private static function setNullWhenEmpty($model)
    {
        foreach ($model->toArray() as $name => $value) {
            if (empty($value)) {
            $model->{$name} = null;
            }
        }
    }
}
现在,所有空字段将自动设置为
null
,保存前无需检查


.

在这种情况下,我喜欢使用突变子:

public function setTargetAttribute($target){

  $this->attributes['target'] = $target ?: null;

}
我的解决方案是(Laravel 5.2):

//Model.php

public function nullIfBlank($field) {
  return trim($field) !== '' ? $field : null;
}
public function setTargetAttribute($target) {
  $this->attributes['target'] = $this->nullIfBlank($target);
}
//扩展model.php的自定义模型

public function setTargetAttribute($target) {
  $this->attributes['target'] = $this->nullIfBlank($target);
}

注意按照上面的方式命名setter(mutator),lowerCamelCase和magic会出现。

在数据库结构中,列的默认值应该是
NULL
。)否则,您将始终看到一个空值,而不是真正的
NULL
。如果您要求,请选择最干净的选项