Laravel刀片:如何删除预先填充的表单字段数据(在db中保存为null)

时间:2014-09-25 18:39:06

标签: database forms laravel laravel-4 blade

我正在构建一些表单,其中字段用数据库数据填充,如果没有数据则默认为占位符文本。

我似乎无法弄清楚的是:当用户删除表单中的所有数据时,它不会将其作为空白/ null保存回数据库,它只是在字段中携带相同的值...

输入:

<div class="form-group @if($errors->has('username')){{ 'has-error' }}@endif">    
    <div class="col-md-6">
        <label for="username">Username</label>
        @if($errors->has('username'))<span class="label-has-error">{{ $errors->first('username') }}</span>@endif
        <input type="text" name="username" class="form-control" tabindex="1" @if($info->username) value="{{ e($info->username) }}" @else placeholder="Username" @endif>
    </div>
</div>

控制器:

public function postSettings() {

    $validator = Validator::make(Input::all(),
        array(
            'username' => 'required_without_all:location,fullname|min:3',
            'fullname' => 'required_without_all:location,username',
            'location' => 'required_without_all:fullname,username'
        )
    );

    if($validator->fails()) {

        return Redirect::route('settings')->withErrors($validator);

    } else {

        $user = User::find(Auth::user()->id);

        if(Input::get('username')) {
            $user->username = Input::get('username');
        }
        if(Input::get('fullname')) {
            $user->fullname = Input::get('fullname');
        }
        if(Input::get('location')) {
            $user->location = Input::get('location');
        }

        $user->save();

        Flash::success('Settings have been updated');

        return Redirect::route('settings');

    }

    Flash::error('Update was unsecessful, please try again!');

    return Redirect::route('settings');

}

关于如何实现这一目标的任何想法?

谢谢,杰克。

1 个答案:

答案 0 :(得分:1)

问题是if陈述。

您应该尝试更改:

if(Input::get('username')) {
    $user->username = Input::get('username');
}
if(Input::get('fullname')) {
    $user->fullname = Input::get('fullname');
}
if(Input::get('location')) {
    $user->location = Input::get('location');
}

$user->username = Input::get('username');
$user->fullname = Input::get('fullname');
$user->location = Input::get('location');

现在,如果这些输入为空if语句将返回false,那么分配将无法完成,最后您将完全保存到数据库中。