2016-08-07 2 views
2

Я использую флажок в форме, по некоторым причинам я не могу сохранить значение статуса флажка (отмечено или не отмечено).Laravel 5 Значения полей привязки формы формы

Я использую форму модель переплет.

Моя форма:

{!! Form::model($profile, ['method' => 'PATCH', 'action' => ['[email protected]', $profile->id]]) !!} 

<div class="form-group"> 
    {!! Form::label('wifi', 'Wifi') !!} 
    {!! Form::checkbox('wifi','yes', $profile->wifi) !!}Wifi 
</div> 

{!! Form::close() !!} 

Моя схема:

$table->boolean('wifi')->nullable(); 

Но я также попробовал это целое

Я не могу понять, что я делаю неправильно

ответ

3

Ваш этот кусок кода

{!! Form::checkbox('wifi','yes', $profile->wifi) !!}Wifi 

генерирует это

<input checked="checked" name="wifi" type="checkbox" value="yes"> 

Это означает, что вы отправляете на сервер значение yes, но тип данных столбца не является varchar/text. Вы задаете значение boolean.

обновите свой код до этого, потому что вы используете form model binding, поэтому вам не нужно его пополнять, laravel сделает это за вас.

{!! Form::checkbox('wifi') !!} Wifi 

Также, включают в свой wifi ключ в fillable и casts массива. как так

protected $fillable = [ ..., 'wifi' ]; 

protected $casts = [ 'wifi' => 'boolean' ]; 

Примечание: код схемы

$table->boolean('wifi')->nullable; 

nullable не является свойством, она является функцией. поэтому обновлять его, а

$table->boolean('wifi')->nullable(); 

После этого refersh базы данных миграции

php artisan migrate:refresh 
+0

Привет, Зайн, спасибо. Я использовал ваш пример и обновился до nullable(). Тем не менее, состояние не сохраняется в DB – Mamulasa

+0

, вы пытались выполнить «php artisan migrate: refresh'? –

+0

Да, я обновил мою миграцию – Mamulasa

0

Это зависит от того, как вы пытаетесь сохранить эти данные.

Если вы используете save() метод, сделать что-то вроде этого:

$model->wifi = isset($request->wifi); 

PS: Я предполагаю, что это должно быть ->nullable()

+0

Привет Алексей, я использую: обновление публичной функции (запрос ProfileRequest $, $ ID) { $ Профиль = Профиль: : findOrFail ($ ID); $ profile-> update ($ request-> all()); return redirect ('backend/profile'); } – Mamulasa

+0

Затем попробуйте сделать это '$ request-> wifi = isset ($ request-> wifi);' прямо перед '$ profile-> update ($ request-> all());'. А также, в вашем случае, вы должны иметь 'wifi' в массиве' $ fillable' модели 'Profile'. –

+0

ok, wifi находится в заполняемом массиве, и я обновил свой контроллер до: public function update (ProfileRequest $ request, $ id) { $ profile = Профиль :: findOrFail ($ id); $ request-> wifi = isset ($ request-> wifi); $ profile-> update ($ request-> all()); return redirect ('backend/profile'); } Но все же то же самое :( – Mamulasa