我试图用参考数据播种我的MySQL数据库。根据我的迁移功能,我遇到困难的特定表有一个可以为空的外键,该外键映射到同一个表以表示父/子关系:
public function up()
{
Schema::create('groups', function (Blueprint $table) {
$table->engine = 'InnoDB';
$table->increments('id');
$table->integer('parent_group_id')->unsigned()->nullable();
$table->foreign('parent_group_id')->references('id')->on('groups');
$table->string('value');
$table->softDeletes();
});
}
问题是尝试在顶级行上将外键作为NULL播种。如果我没有在任何插入的行中包含该字段,则种子按预期工作。当我将字段仅添加到子行时,它希望每行都有相同的字段计数,错误输出为:
[PDOException]
SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column
count doesn't match value count at row 2
我找不到关于如何将值设置为NULL的任何参考。我最后的尝试是:
<?php
use Illuminate\Database\Seeder;
class GroupsTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('groups')->insert([
[
'parent_group_id' => [NULL],
'value' => 'Group1'
],
[
'parent_group_id' => 1,
'value' => 'Subgroup1'
],
[
'parent_group_id' => 2,
'value' => 'Subgroup2'
]
]);
}
}
Array to string conversion
的错误。
将'[NULL]'
错误用于General error: 1366 Incorrect integer value
。我尝试了其他的变化,但没有运气。什么是在种子中插入NULL值的正确方法?任何帮助赞赏。的问候,
答案 0 :(得分:1)
您可以使用php null
值,Laravel非常聪明,可以将其转换为数据库的空值。
DB::table('groups')->insert([
[
'parent_group_id' => null,
'value' => 'Group1'
],
[
'parent_group_id' => 1,
'value' => 'Subgroup1'
],
[
'parent_group_id' => 2,
'value' => 'Subgroup2'
]
]);
使用[
和]
创建一个php数组时,就会出现错误。