私はテーブル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
, CONSTRAINTorganizations_main_organization_id_foreign
FOREIGN KEY (main_organization_id
) REFERENCESorganizations
(id
)) (SQL: insert intoorganizations
(main_organization_id
) values ())
しかし、なぜこれができませんの?フィールドはnullableです。つまり、暗黙的に要求にmain_organization_id
をnull
に設定する必要がありますか?
マイ$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**
私はこのようなコードを防ぎたいです。これは可能ですか?
ありがとうございます。
SQLエラーからあなたのリクエスト($ request-> all())に何が入っているかを確認できますか?空であるか、単一のフィールドだけが渡されたようです - main_organization_id – michaeltintiuc
main_organization_idフィールドをフォームモデル上に空の値をチェックしてnullにキャストするための "setter"メソッドを作成することがあります – michaeltintiuc