【问题标题】:laravel checkbox inserting into mysql database 'Integrity constraint violation'laravel 复选框插入 mysql 数据库“违反完整性约束”
【发布时间】:2017-11-09 15:54:26
【问题描述】:

我创建了一个将一些数据发送到 mysql 数据库的简单表单。 输入nameemail 时一切正常。除了复选框。当所有复选框都被选中时,它运行完美,但如果没有 -> 我总是得到这个错误:

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();

这是我的控制器文件:

    $user = new User;
    $user->email= $request->input('email');
    $user->checkbox1= $request->input('checkbox1');

对此有任何帮助吗?只需要检查或未检查的一些真值或假值。谢谢各位!

【问题讨论】:

  • 你能粘贴整个控制器吗?这只是一个sn-p

标签: php mysql laravel laravel-5


【解决方案1】:

发生了一些奇怪的事情,但根据你的问题,我认为这并不重要......

复选框的工作方式是,如果不选中它们,则不会向服务器发送任何内容。因此,使用您当前的代码,checkbox1 字段将始终为 true 或 null,它永远不会为 false,因为 false 永远不会作为值发送到服务器。

您可能需要做的是在插入时应用默认值...

$user->checkbox1= $request->input('checkbox1', 0);

这样,如果未选中复选框,您的代码将假定为 false 并将其插入到数据库中。

现在,对于正在发生的奇怪事情,您的错误消息表明您无法在该列中插入 null,但您已非常清楚地在迁移中将该字段设置为可为空。这些是相同的字段吗?您是否可能在不重新运行它来更新数据库中的架构的情况下更新迁移?

您能否运行语句 show create table users 并使用从该查询返回的内容更新您的问题?

【讨论】:

  • 你可以使用 $request->has('checkbox1');得到一个布尔值。
  • 谢谢伙计们,这成功了!刷新并再次开始迁移!
【解决方案2】:

如果您没有明确需要 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-12
    • 2016-08-11
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 2019-01-02
    • 2017-09-11
    相关资源
    最近更新 更多