控制器,模型和更新选择属性

时间:2019-03-19 17:58:02

标签: laravel forms

我已经看了很多教程,并且我已经开始使用Laravel了,但是,在这些教程中我错过了/未能发现的一件事是如何完成“选择性更新”,抱歉,如果措辞不正确,但这是我的问题。

我有 user 模型,该模型在Laravel添加的auth字段之上包含多个自定义字段,这些自定义字段是:

  • ConsiderForAccommodation
  • 参加

我目前在视图中有一个表单,允许用户设置选择是否要考虑住宿,其工作方式如下:

用户模型

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password', 'considerForAccommodation'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}

用户控制器

public function update(Request $request)
{
    // Update the given user
    $user = auth()->user();

    // If the value is null then it's false.
    $user->ConsiderForAccommodation = $request->input('ConsiderForAccommodation') != null;

    $user->save();

    return redirect('/accommodation');
}

住宿视图(窗体)

@section('content')
        <h1>Accomodation</h1>
        <p>This is the accomodation page.</p>

        {!! Form::open(['action' => ['UserController@update', Auth::id()], 'method' => 'POST']) !!}
                <div class="form-group">
                        {{Form::label('ConsiderForAccommodation', 'Consider Me For Accommodation')}}
                        {{Form::checkbox('ConsiderForAccommodation', null, Auth::user()->ConsiderForAccommodation)}}
                </div>
                {!! Form::token() !!}
                {{Form::hidden('_method', 'PUT')}}
                {{Form::submit('Submit', ['class' => 'btn btn-primary'])}}
        {!! Form::close() !!}
@endsection

路线

Route::get('/', 'PagesController@index');
Route::get('/accommodation', 'PagesController@accommodation');
Route::get('/registry', 'PagesController@registry');
Route::get('/rsvp', 'PagesController@rsvp');
Route::get('/schedule', 'PagesController@schedule');
Route::get('/travel', 'PagesController@travel');

Route::resource('user', 'UserController');

Auth::routes();

正如我提到的,此实现按预期工作。现在,问题是我还有另一个单独的表单(在不同的视图中),我想包含一个表单,该表单仅针对模型更新“ Attending”值。如何在Laravel中处理此问题?

我是否必须为要与其他属性分别进行更新的每个属性创建一个单独的控制器,还是我要完全解决这个错误,并且有一种简便的方法?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

解决此问题的可能性很多。其中之一是创建一条具有参数的路由

Route::put('/users/set-parameter/{param}', 'UserController@setParameter');

然后在控制器中,您可以通过一种方法设置不同的参数:

public function setParameter(Request $request, string $param)
{
    $user = auth()->user();
    $user->{$param} = $request->input($param) != null;
    $user->save();
    return redirect('/accommodation');
}

请记住,有时这不是处理该问题的最佳方法。几乎一律都有利弊。