Schéma de base de données Laravel, clés étrangères nullables
P粉805107717
P粉805107717 2023-10-17 14:43:49
0
2
609

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

  1. Tableau des utilisateurs
  2. Liste des partenaires

Table utilisateur gérera ces 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();
});

Et la Table des partenaires contiendra toutes les méta-informations de l'utilisateur comme 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 s'inscrit sur le site Web, je n'ai besoin que de quelques champs, qui sont 用户名 电子邮件地址 密码 名字 姓氏 . Ce sont des champs obligatoires uniquement.

Par conséquent, les informations du tableau des partenaires peuvent être renseignées une fois que l'utilisateur a terminé son inscription sur le site Web.

Mais en raison de la structure des clés étrangères, je ne peux pas 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, admin@example.com, 2016-06-09 19:41:18, 2016-06-09 19:41:18))

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

Ma question est la suivante : existe-t-il une solution de contournement pour que je puisse remplir le tableau des partenaires avec le pays ou toute autre donnée non requise, tout en conservant le schéma de table externe pour le pays, l'état, etc.

P粉805107717
P粉805107717

répondre à tous(2)
P粉135799949

Pour que Laravel 7.x crée une clé étrangère nullable, utilisez simplement :

$table->foreignId('country_id')->nullable()->constrained();

$table->foreignId('state_id')->nullable()->constrained();

Rappelez-vous : la la nullitédoit avant être contrainte, sinon la nullabilité ne sera pas affectée.

P粉638343995

Définissez country_idstate_id sur nullable comme indiqué ci-dessous.

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

$table->integer('state_id')->nullable()->unsigned();
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!