Laravel-Datenbankschema, nullfähige Fremdschlüssel
P粉805107717
P粉805107717 2023-10-17 14:43:49
0
2
677

Ich habe diese beiden Datenbanktabellen:

  1. Benutzertabelle
  2. Partnerliste
Die

Benutzertabelle wird solche Informationen verarbeiten

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

Und die Partnertabelle enthält alle Benutzer-Metainformationen wie Vor- und Nachname usw.

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

Wenn sich ein Benutzer auf der Website registriert, benötige ich nur ein paar Felder, nämlich 用户名 电子邮件地址 密码 名字 姓氏 . Dies sind nur Pflichtfelder.

Daher können die Informationen in der Partnertabelle ausgefüllt werden, nachdem der Benutzer die Website-Registrierung abgeschlossen hat.

Aber aufgrund der Struktur der Fremdschlüssel kann ich aufgrund dieses Fehlers nicht fortfahren:

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

Ich weiß, dass dies an der von der Partnertabelle benötigten Ländertabelle liegt.

Meine Frage lautet: Gibt es eine Problemumgehung, damit ich die Partnertabelle mit dem Land oder anderen nicht erforderlichen Daten füllen kann, aber das externe Tabellenschema für Land, Bundesland usw. beibehalten kann?

P粉805107717
P粉805107717

Antworte allen(2)
P粉135799949

对于 laravel 7.x 创建可为空的外键,只需使用:

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

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

记住:可空应该之前受约束,否则可空将不会受到影响。

P粉638343995

country_idstate_id 设置为可为空,如下所示。

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

$table->integer('state_id')->nullable()->unsigned();
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!