我创建了一个将一些数据发送到mysql数据库的简单表单。
输入name
或email
时一切正常。除了复选框。选中所有复选框后,它会运行perfekt,但如果不是 - >>我总是得到这个错误:
SQLSTATE [23000]:完整性约束违规:1048列' checkbox1' 不能为空
所以我得到了这个用于创建表单:
{{Form::label('checkboxlabel', 'Agree')}} {{Form::checkbox('checkbox1',1, true)}}
这是我的迁移文件:
Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('email')->unique(); $table->boolean('checkbox1')->nullable();
这是我的Controller文件:
$user = new User; $user->email= $request->input('email'); $user->checkbox1= $request->input('checkbox1');
对此有何帮助?只需要一些true或false值来检查或不检查。大家好!
答案 0 :(得分:1)
有一些奇怪的事情,但根据你的问题,我认为这不重要......
复选框的工作方式,如果未选中,则不会将任何内容发送到服务器。因此,使用当前代码,checkbox1字段将始终为true或null,它永远不会为false,因为false永远不会作为值发送到服务器。
您可能需要做的是在插入时应用默认值...
$user->checkbox1= $request->input('checkbox1', 0);
这样,如果未选中该复选框,则代码将假定为false并将其插入数据库中。
现在,对于发生的奇怪事情,您的错误消息表明您无法在该列中插入null,但您已经非常清楚地将该字段设置为在迁移中为空。这些是相同的领域吗?您是否可以更新迁移而不重新运行它来更新数据库中的模式?
您可以运行语句show create table users
并使用该查询返回的内容更新您的问题吗?
答案 1 :(得分:0)
如果你没有明确需要布尔值的null
值,你可以这样做:
// Inside your migration
$table->boolean('checkbox1')->default(false);
// Inside the controller
$user->checkbox1 = $request->input('checkbox1');
或者,如果未在请求中设置该值,则可以设置默认值:
// Inside your migration
$table->boolean('checkbox1');
// Inside the controller
$user->checkbox1 = $request->input('checkbox1', 0);