laravel复选框插入到mysql数据库'完整性约束违规'

时间:2017-11-09 15:54:27

标签: php mysql laravel laravel-5

我创建了一个将一些数据发送到mysql数据库的简单表单。 输入nameemail时一切正常。除了复选框。选中所有复选框后,它会运行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值来检查或不检查。大家好!

2 个答案:

答案 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);