私は参照データを使ってMySQLデータベースをシードしようとしています。Nullable外部キーのLaravelシード
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として外部キーとシードしようとしている:私は難しさを持っています特定のテーブルには、私のマイグレーション機能ごとに、親/子関係を表すために、同じテーブルにマップ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値を挿入する正しい方法は何ですか?どんな助けもありがたい。よろしくお願いします。
私はこれを試したことを誓いますが、私は別のエラーでそれを包み込んでいるかもしれません。これで私の問題は解決しました。ありがとうございました – nbayly