Контроллеры, Модели и обновление выберите свойства - PullRequest
0 голосов
/ 19 марта 2019

Я прошел довольно много уроков, и я начинаю добираться туда с Laravel, однако, одна вещь, которую я как-то упустил в этих уроках / которую не удалось обнаружить, это как выполнить «выборочное обновление», извините, если это неправильная формулировка, однако это моя проблема.

У меня есть модель user , она содержит несколько настраиваемых полей поверх полей авторизации, добавленных Laravel, настраиваемые поля:

  • 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();

Как я уже говорил, эта реализация работает как задумано. Теперь проблема в том, что у меня есть другая отдельная форма (в другом представлении), которую я хотел бы содержать в форме, которая only обновляет значение «Attending» для модели. Как мне справиться с этим в Laravel?

Нужно ли создавать отдельный контроллер для каждого свойства, которое я хочу отдельно обновлять от других, или я полностью смотрю на это неправильно, и есть простой способ сделать это?

Любая помощь будет оценена.

1 Ответ

1 голос
/ 19 марта 2019

Есть много возможностей, как решить эту проблему. Одним из них является создание одного маршрута, который также имеет параметр

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');
}

Имейте в виду, что иногда это не лучший способ справиться с этим. Есть плюсы и минусы, как почти всегда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...