web-dev-qa-db-ja.com

Laravelデータベーススキーマ、Nullable Foreign

次の2つのデータベーステーブルがあります。

  1. ユーザーテーブル
  2. パートナーテーブル

ユーザーテーブルはこの種の情報を処理します

Schema::create('users', function (Blueprint $table) {
      $table->increments('id')->unique();
      $table->string('email')->unique();
      $table->string('username')->unique();
      $table->string('password', 60);
      $table->string('photo')->nullable();
      $table->integer('partner_id')->unsigned();
      $table->foreign('partner_id')->references('id')->on('partners');
      $table->rememberToken();
      $table->timestamps();
});

パートナーテーブルには、名や姓などのすべてのユーザーメタ情報が含まれます。

Schema::create('partners', function (Blueprint $table) {

    /**
     * Identity Columns
     */
    $table->increments('id')->unique();
    $table->string('first_name');
    $table->string('middle_name')->nullable();
    $table->string('last_name')->nullable();
    $table->string('display_name')->nullable();
    $table->string('email')->unique()->nullable();
    $table->string('website')->nullable();
    $table->string('phone')->nullable();
    $table->string('mobile')->nullable();
    $table->string('fax')->nullable();
    $table->date('birthdate')->nullable();
    $table->longText('bio')->nullable();
    $table->string('lang')->nullable(); //Language

    /**
     * Address Columns
     */
    $table->text('street')->nullable();
    $table->text('street2')->nullable();
    $table->integer('country_id')->unsigned(); // foreign
    $table->foreign('country_id')->references('id')->on('countries');
    $table->integer('state_id')->unsigned();   // foreign
    $table->foreign('state_id')->references('id')->on('country_states');
    $table->string('city')->nullable();
    $table->string('district')->nullable();
    $table->string('area')->nullable();
    $table->string('Zip')->nullable();
});

ユーザーがサイトに登録されているとき、usernameemail addresspasswordfirst nameおよびlast name。これらは必須フィールドのみです。

そのため、ユーザーがサイトへの登録を完了した後、パートナーテーブルの情報を後で入力できます。

しかし、外部キーの構造のために、このエラーのためにこれ以上先に進むことはできません:

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`mytable`.`tbl_partners`, CONSTRAINT `partners_country_id_foreign` FOREIGN KEY (`country_id`) REFERENCES `tbl_countries` (`id`)) (SQL: insert into `tbl_partners` (`first_name`, `last_name`, `display_name`, `email`, `updated_at`, `created_at`) values (Jack, Wilson, admin, [email protected], 2016-06-09 19:41:18, 2016-06-09 19:41:18))

これは、パートナーテーブルに必要な国テーブルが原因であることがわかっています。
私の質問は:回避策はありますか。パートナーテーブルに国またはその他の必要でないデータを入力できますが、国、州などの外部テーブルスキーマは保持します。

17

をセットする country_id そしてその state_id null可能、など。

$table->integer('country_id')->nullable()->unsigned();

$table->integer('state_id')->nullable()->unsigned();
41
rcx1