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
。如果您要求,请选择最干净的选项