我有许多字段在MySQL中默认为NULL。例如,在下面的代码片段中,name是必需的而不是null,但name_abbrev,email_general和description都可以为空,并且在数据库中默认设置为NULL。但是,通过Laravel中的表格输入数据大多不起作用。如果我插入一个只有名称且其他所有内容都留空的行,则当然输入正确的名称,并为email_general输入NULL,但其他两个可空字段会发布空字符串而不是NULL。如果我然后通过更改名称更新行,则更新还会将email_general的NULL更改为空字符串。如果我手动将可空字段的数据库行中的值从空字符串更改为NULL,当我更新行(仍然将所有空字段留空)时,它会将所有NULL字段更改为空字符串。我无法找到任何我做错的事。为什么它不会输入NULL(除了在一个字段中编码与其他字段完全相同),为什么更新甚至将该字段更改为空字符串?
控制器:
public function store()
{
$component = new Component;
$component->name = Input::get('name');
$component->name_abbrev = Input::get('name_abbrev');
$component->email_general = Input::get('email_general');
$component->description = Input::get('description'); ...
$component->save();
return Redirect::route('components.index');
}
public function update($id)
{
$component = $this->component->find($id);
$component->name = Input::get('name');
$component->name_abbrev = Input::get('name_abbrev');
$component->email_general = Input::get('email_general');
$component->description = Input::get('description'); ...
$component->save();
return Redirect::route('components.index');
}
create.blade.php:
{{ Form::open(['route' => 'components.store']) }}
<div class="required">
{{ Form::label('name','Name:') }}
{{ Form::text('name') }}
{{ $errors->first('name') }}
</div>
<div>
{{ Form::label('name_abbrev','Abbreviation:') }}
{{ Form::text('name_abbrev', NULL) }}
</div>
<div>
{{ Form::label('email','General Email:') }}
{{ Form::text('email',NULL) }}
</div>
<div>
{{ Form::label('description','Description:') }}
{{ Form::textarea('description',NULL,['size' => '26x3']) }}
</div> ...
<div>
{{ Form::submit('Add New Component', array('class'=>'button')) }}
</div>
{{ Form::close() }}
edit.blade.php:
{{ Form::model($component, array('method'=>'put','route'=>array('components.update', $component->id))) }}
<div class="required">
{{ Form::label('name','Name:') }}
{{ Form::text('name') }}
{{ $errors->first('name') }}
</div>
<div>
{{ Form::label('name_abbrev','Abbreviation:') }}
{{ Form::text('name_abbrev', NULL) }}
</div>
<div>
{{ Form::label('email_general','General Email:') }}
{{ Form::text('email_general', NULL) }}
</div
<div>
{{ Form::label('description','Description:') }}
{{ Form::textarea('description',NULL,['size' => '26x3']) }}
</div> ...
<div>
{{ Form::submit('Update Component', array('class'=>'button')) }}
</div>
{{ Form::close() }}
非常感谢!这应该很容易,但出于某种原因,它不是。
答案 0 :(得分:1)
如果你真的需要在某些列上使用null,我建议你使用Mutators:
Laravel 3:http://three.laravel.com/docs/database/eloquent#getter-and-setter-methods
Laravel 4:http://laravel.com/docs/eloquent#accessors-and-mutators
因此,如果新值为空字符串(!$ value),则用NULL覆盖它。