SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败 - laravel

问题描述:

我有3个表。 1.主题 2.教师 3.课程SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败 - laravel

我的课程表在这里迁移。

public function up() 
{ 
    Schema::create('courses', function(Blueprint $table) { 
     $table->increments('c_id'); 
     $table->integer('sub_id1')->unsigned()->nullable(); 
     $table->integer('t_id1')->unsigned()->nullable(); 
     $table->integer('sub_id2')->unsigned()->nullable(); 
     $table->integer('t_id2')->unsigned()->nullable(); 
     $table->integer('sub_id3')->unsigned()->nullable(); 
     $table->integer('t_id3')->unsigned()->nullable(); 
     $table->integer('sub_id4')->unsigned()->nullable(); 
     $table->integer('t_id4')->unsigned()->nullable(); 
     $table->integer('sub_id5')->unsigned()->nullable(); 
     $table->integer('t_id5')->unsigned()->nullable(); 
     $table->integer('sub_id6')->unsigned()->nullable(); 
     $table->integer('t_id6')->unsigned()->nullable(); 
     $table->integer('sub_id7')->unsigned()->nullable(); 
     $table->integer('t_id7')->unsigned()->nullable(); 
     $table->integer('sub_id8')->unsigned()->nullable(); 
     $table->integer('t_id8')->unsigned()->nullable(); 
     $table->integer('sub_id9')->unsigned()->nullable(); 
     $table->integer('t_id9')->unsigned()->nullable(); 
     $table->integer('sub_id10')->unsigned()->nullable(); 
     $table->integer('t_id10')->unsigned()->nullable(); 
     $table->integer('sub_id11')->unsigned()->nullable(); 
     $table->integer('t_id11')->unsigned()->nullable(); 
     $table->integer('sub_id12')->unsigned()->nullable(); 
     $table->integer('t_id12')->unsigned()->nullable(); 
     $table->integer('sub_id13')->unsigned()->nullable(); 
     $table->integer('t_id13')->unsigned()->nullable(); 
     $table->integer('sub_id14')->unsigned()->nullable(); 
     $table->integer('t_id14')->unsigned()->nullable(); 
    }); 
} 

public function down() 
{ 
    Schema::drop('courses'); 
} 

现在我试图插入课程表。 如果我将某些值留空(例如sub_id5到sub_id14 & t_id5到t_id14),则会发生错误。虽然当我从xampp/phpmyadmin执行相同的操作时,它不会显示任何问题。在更新和删除的情况下,课程表上的约束被设置为无动作。 我正在使用'Collective \ Html \ FormFacade'进行输入。 这里是表格代码。

{!! Form::open(array('route' => 'course.store', 'method' => 'POST')) !!} 
<ul> 
    <li> 
     {!! Form::label('sub_id1', 'Sub_id1:') !!} 
     {!! Form::number('sub_id1') !!} 
    </li> 
    <li> 
     {!! Form::label('t_id1', 'T_id1:') !!} 
     {!! Form::number('t_id1') !!} 
    </li> 
    <li> 
     {!! Form::label('sub_id2', 'Sub_id2:') !!} 
     {!! Form::number('sub_id2',NULL) !!} 
    </li> 
    <li> 
     {!! Form::label('t_id2', 'T_id2:') !!} 
     {!! Form::number('t_id2',NULL) !!} 
    </li> 
    <li> 
     {!! Form::label('sub_id3', 'Sub_id3:') !!} 
     {!! Form::number('sub_id3',NULL) !!} 
    </li> 
    <li> 
     {!! Form::label('t_id3', 'T_id3:') !!} 
     {!! Form::number('t_id3',NULL) !!} 
    </li> 
    <li> 
     {!! Form::label('sub_id4', 'Sub_id4:') !!} 
     {!! Form::number('sub_id4',NULL) !!} 
    </li> 
    <li> 
     {!! Form::label('t_id4', 'T_id4:') !!} 
     {!! Form::number('t_id4',NULL) !!} 
    </li> 
    <li> 
     {!! Form::label('sub_id5', 'Sub_id5:') !!} 
     {!! Form::number('sub_id5',NULL) !!} 
    </li> 
    <li> 
     {!! Form::label('t_id5', 'T_id5:') !!} 
     {!! Form::number('t_id5',NULL) !!} 
    </li> 
    <li> 
     {!! Form::label('sub_id6', 'Sub_id6:') !!} 
     {!! Form::number('sub_id6',NULL) !!} 
    </li> 
    <li> 
     {!! Form::label('t_id6', 'T_id6:') !!} 
     {!! Form::number('t_id6',NULL) !!} 
    </li> 
    <li> 
     {!! Form::label('sub_id7', 'Sub_id7:') !!} 
     {!! Form::number('sub_id7',NULL) !!} 
    </li> 
    <li> 
     {!! Form::label('t_id7', 'T_id7:') !!} 
     {!! Form::number('t_id7',NULL) !!} 
    </li> 
    <li> 
     {!! Form::label('sub_id8', 'Sub_id8:') !!} 
     {!! Form::number('sub_id8',NULL) !!} 
    </li> 
    <li> 
     {!! Form::label('t_id8', 'T_id8:') !!} 
     {!! Form::number('t_id8',NULL) !!} 
    </li> 
    <li> 
     {!! Form::label('sub_id9', 'Sub_id9:') !!} 
     {!! Form::number('sub_id9',NULL) !!} 
    </li> 
    <li> 
     {!! Form::label('t_id9', 'T_id9:') !!} 
     {!! Form::number('t_id9',NULL) !!} 
    </li> 
    <li> 
     {!! Form::label('sub_id10', 'Sub_id10:') !!} 
     {!! Form::number('sub_id10',NULL) !!} 
    </li> 
    <li> 
     {!! Form::label('t_id10', 'T_id10:') !!} 
     {!! Form::number('t_id10',NULL) !!} 
    </li> 
    <li> 
     {!! Form::label('sub_id11', 'Sub_id11:') !!} 
     {!! Form::number('sub_id11',NULL) !!} 
    </li> 
    <li> 
     {!! Form::label('t_id11', 'T_id11:') !!} 
     {!! Form::number('t_id11',NULL) !!} 
    </li> 
    <li> 
     {!! Form::label('sub_id12', 'Sub_id12:') !!} 
     {!! Form::number('sub_id12',NULL) !!} 
    </li> 
    <li> 
     {!! Form::label('t_id12', 'T_id12:') !!} 
     {!! Form::number('t_id12',NULL) !!} 
    </li> 
    <li> 
     {!! Form::label('sub_id13', 'Sub_id13:') !!} 
     {!! Form::number('sub_id13',NULL) !!} 
    </li> 
    <li> 
     {!! Form::label('t_id13', 'T_id13:') !!} 
     {!! Form::number('t_id13',NULL) !!} 
    </li> 
    <li> 
     {!! Form::label('sub_id14', 'Sub_id14:') !!} 
     {!! Form::number('sub_id14',NULL) !!} 
    </li> 
    <li> 
     {!! Form::label('t_id14', 'T_id14:') !!} 
     {!! Form::number('t_id14',NULL) !!} 
    </li> 
    <li> 
     {!! Form::submit() !!} 
    </li> 
</ul> 
    {!! Form::close() !!} 

所以它意味着如果我不放任何值,在任何输入字段它应该默认发送NULL。进一步检查我看到它不是发送NULL而是发送''。

这里是我发现的。

at Connection->runQueryCallback('insert into `courses` (`sub_id1`, `sub_id2`, `sub_id3`, `sub_id4`, `sub_id5`, `sub_id6`, `sub_id7`, `sub_id8`, `sub_id9`, `sub_id10`, `sub_id11`, `sub_id12`, `sub_id13`, `sub_id14`, `t_id1`, `t_id2`, `t_id3`, `t_id4`, `t_id5`, `t_id6`, `t_id7`, `t_id8`, `t_id9`, `t_id10`, `t_id11`, `t_id12`, `t_id13`, `t_id14`) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', array('1', '1', '2', '', '', '', '', '', '', '', '', '', '', '', '1', '1', '2', '', '', '', '', '', '', '', '', '', '', ''), object(Closure)) in Connection.php line 629 

可以任何身体的帮助? 在此先感谢

从它看起来像使用$ model-> fill($ yourInput)。

提交表单时,应过滤提交数据,不要包含空字段。你可以通过过滤数组来实现,例如:

$model->fill(array_filter(\Input::all(), function($var) { 
    return $var !== ''; 
});