Nullable外键的Laravel种子

时间:2017-04-20 20:02:14

标签: mysql laravel

我试图用参考数据播种我的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值的正确方法?任何帮助赞赏。的问候,

1 个答案:

答案 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数组时,就会出现错误。