Mamulasa
Mamulasa

Reputation: 543

Laravel 5 Form Model Binding Checkbox Values

I am using a checkbox in a form, for some reasons I can't store the value of the checkbox status (checked or unchecked).

I am using form model binding.

My form is:

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

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

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

My Schema:

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

But I also tried it with an integer

I can't figure out what I am doing wrong

Upvotes: 4

Views: 8394

Answers (2)

Zayn Ali
Zayn Ali

Reputation: 4925

Your this piece of code

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

is generating this

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

Which means that you are sending the value yes to the server but your column data type is not varchar/text. You set it to boolean.

update your code to this because you are using form model binding so no need to popluate it, laravel will do this for you.

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

Also, include your wifi key in fillable and casts array. like so

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

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

Note: your schema code

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

nullable is not a property, it is a function. so update it as well

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

After that refersh your database migration

php artisan migrate:refresh

Upvotes: 7

Alexey Mezenin
Alexey Mezenin

Reputation: 163898

It depends on how are you trying to persist this data.

If you're using save() method, do something like this:

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

PS: I guess it should be ->nullable()

Upvotes: 0

Related Questions