我有以下表单,这是一个只有一个单选按钮的简单表单:
@extends('layouts.app')
@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', 'Consider Me For Accommodation', false)}}
</div>
{!! Form::token() !!}
{{Form::hidden('_method', 'PUT')}}
{{Form::submit('Submit', ['class' => 'btn btn-primary'])}}
{!! Form::close() !!}
@endsection
然后我尝试更新值“ConsiderForAccomodation”,这是我添加到用户表中的一个字段:
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function update(Request $request)
{
// Update the given user
$user = auth()->user();
$user->ConsiderForAccommodation = $request->input('ConsiderForAccommodation');
$user->save();
return redirect('/accommodation');
}
但是,在选中该框然后提交表单时,出现此错误:
SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect integer value: 'Consider Me For Accommodation' for column 'ConsiderForAccommodation' at row 1 (SQL: update `users` set `updated_at` = 2019-03-18 20:44:37, `ConsiderForAccommodation` = Consider Me For Accommodation where `id` = 1)
它似乎达到了这种更新方法,但是,我似乎做错了什么,因为它没有选择复选框的值。
我究竟做错了什么?如果需要更多代码,我很乐意更新帖子。
编辑 - 用户表迁移,在 MySQL 中查看该列已创建为“TinyInt”,据我所知是正确的类型:
class UserAddAccomodationFields extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
// Add field "ConsiderForAccommodation" to table.
Schema::table('users', function(Blueprint $table)
{
$table->boolean('ConsiderForAccommodation');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
// Remove field "ConsiderForAccommodation" from table.
Schema::table('users', function(Blueprint $table)
{
$table->dropColumn('ConsiderForAccommodation');
});
}
}
在laravelcollective/html
文档中,我看到以下内容。
Form::checkbox('name', 'value', true);
这意味着您应该将复选框代码更改为:
{{Form::checkbox('ConsiderForAccommodation', 1, false)}}
我假设该值在复选框被勾选时在请求中传递,null
否则返回,但并不完全确定。
假设上述情况,您可以在控制器中执行以下操作:
if($request->input('ConsiderForAccomodation') == null) {
$user->ConsiderForAccomodation = 0;
} else {
$user->ConsiderForAccomodation = 1;
// or $user->ConsiderForAccomodation = $request->input('ConsiderForAccomodation');
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句