2016-12-12 21 views
0

私はテーブルorganizationsを持っています。このテーブルのプライマリはid(int 10、符号なし、AUTO_INCREMENT)です。NULL可能フィールドで外部キー制約が失敗する

テーブルorganizationsには、私もiselfへの外部キーがあります:main_organization_id。これには、次の属性があります。(int 10、unsigned、nullable、空:TRUE、デフォルト:NULL)

私は新しい組織を作成するたびに:私のリクエストでmain_organization_idなければ

$organization = Organization::create($request->all()); 

を、それが次のエラーで失敗します。

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (myDB . organizations , CONSTRAINT organizations_main_organization_id_foreign FOREIGN KEY (main_organization_id) REFERENCES organizations (id)) (SQL: insert into organizations (main_organization_id) values ())

しかし、なぜこれができませんの?フィールドはnullableです。つまり、暗黙的に要求にmain_organization_idnullに設定する必要がありますか?

マイ$fillable

protected $fillable = [ 
     'main_organization_id', 
    ]; 

マイ移行:私の新しい行を作成する前$request['main_organization_id'] = null;

Schema::table('organizations', function (Blueprint $table) { 

    $table->integer('main_organization_id')->unsigned()->nullable(); 
    $table->foreign('main_organization_id')->references('id')->on('organizations'); 
});**strong text** 

私はこのようなコードを防ぎたいです。これは可能ですか?

ありがとうございます。

+0

SQLエラーからあなたのリクエスト($ request-> all())に何が入っているかを確認できますか?空であるか、単一のフィールドだけが渡されたようです - main_organization_id – michaeltintiuc

+0

main_organization_idフィールドをフォームモデル上に空の値をチェックしてnullにキャストするための "setter"メソッドを作成することがあります – michaeltintiuc

答えて

1

はい、あなたは組織の作成中に、あなたはこのようにそれを行う必要があるフィールドの値を指定する必要があります。

$organization = Organization::create(array_merge([ 
    'main_organization_id' => null, 
], request()->all())); 

は、この情報がお役に立てば幸い!

関連する問題