我正在使用表单模型绑定,并使用fill()和save()方法更新我的数据库。只有表单值存在的情况下才更新字段
{{ Form::model($account) }}
{{ Form::text('name', null, array('class'=>'class')) }}
{{ Form::text('email', null, array('class'=>'class')) }}
{{ Form::password('password', array('class'=>'class')) }}
{{ Form::password('password_confirmation', array('class'=>'class')) }}
{{ Form::close() }}
它将触发我editAccount控制器的方法:
$rules = array(
'name' => array('required'),
'email' => array('required'),
'password' => array('confirmed')
);
$validator = Validator::make(Input::all(), $rules);
if ($validator->fails())
{
// Redirect
}
// Save to DB
$account->fill(Input::all());
$account->save();
,工作正常,但如果没有设置密码供应(因为用户不希望更新/修改),那么密码字段在数据库中设置为空。所以,如果通过表单提供新的密码值,我只想更新密码字段。
我知道我能做到以下几点:
// Set the fields manually
$account->name = Input::get('name');
$account->email = Input::get('email');
// Only update the password field if a value is supplied
if (Input::get('password')) {
$account->password = Input::get('password');
}
$account->save();
但是我不知道是否有一个更清洁处理这样?像Laravel/Eloquent中的UpdateOnlyIfValueExists()方法一样。
你有任何关于为什么应该避免Input :: all()的引用吗?我找不到应该避免的任何推理。 –
如果您有其他可以通过批量分配填写的'User'字段,则可以使用该列名称创建任意字段,并且无需对其进行任何检查即可更改该值。仅收集您打算利用的内容是一种很好的做法。 –
我明白,但正确使用模型的守护或可填充属性(我已经完成)。那么在Input :: all之间并手动填充字段本质上没有安全风险。 –