web-dev-qa-db-fra.com

Laravel Schéma de base de données, Nullable Foreign

J'ai ces deux tables de base de données:

  1. Tables d'utilisateurs
  2. Tables partenaires

ser Tables traitera ce type d'informations

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();
});

Alors que Tables partenaires contient toutes les méta-informations utilisateur telles que le prénom et le nom, etc.

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();
});

Lorsqu'un utilisateur est inscrit sur le site, je veux seulement quelques champs qui sont, username, email address, password, first name et last name. Ce ne sont que les champs obligatoires.

Ainsi, les informations dans les tableaux des partenaires peuvent être remplies plus tard après que l'utilisateur a fini de s'inscrire sur le site.

Mais en raison de la structure de la clé étrangère, je ne peux plus continuer à cause de cette erreur:

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))

Je sais que cela est dû à la table des pays qui est requise par la table des partenaires.
.

17

Met le country_id et le state_id nullable, comme ça.

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

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