Rumah  >  Soal Jawab  >  teks badan

Skema pangkalan data Laravel, kunci asing yang boleh dibatalkan

Saya mempunyai dua jadual pangkalan data ini:

  1. Jadual pengguna
  2. Senarai Rakan Kongsi

Jadual pengguna akan mengendalikan maklumat sedemikian

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

Dan Jadual Rakan Kongsi akan mengandungi semua maklumat meta pengguna seperti nama pertama dan nama keluarga dll.

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

Apabila pengguna mendaftar ke laman web, saya hanya memerlukan beberapa medan, iaitu 用户名 电子邮件地址 密码 名字 姓氏 . Ini adalah medan yang diperlukan sahaja.

Oleh itu, maklumat dalam jadual rakan kongsi boleh diisi selepas pengguna melengkapkan pendaftaran laman web.

Tetapi disebabkan struktur kunci asing, saya tidak dapat meneruskan kerana ralat ini:

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

Saya tahu ini disebabkan oleh jadual negara yang diperlukan oleh jadual rakan kongsi.

Soalan saya ialah: Adakah terdapat penyelesaian supaya saya boleh mengisi jadual rakan kongsi dengan negara atau mana-mana data lain yang tidak diperlukan, tetapi mengekalkan skema jadual luaran untuk negara, negeri, dsb.

P粉805107717P粉805107717341 hari yang lalu611

membalas semua(2)saya akan balas

  • P粉135799949

    P粉1357999492023-10-18 13:21:13

    Untuk laravel 7.x mencipta kunci asing boleh nullable, hanya gunakan:

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

    Ingat: nullabilityhendaklah sebelum dikekang, jika tidak batal tidak akan terjejas.

    balas
    0
  • P粉638343995

    P粉6383439952023-10-18 09:30:39

    Tetapkan country_idstate_id kepada nullable seperti yang ditunjukkan di bawah.

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

    balas
    0
  • Batalbalas