2016-06-09 11 views
7

Mam tabele te dwie bazy danych:laravel Database Schema, Nullable obce

  1. tabel użytkownika
  2. Stoły Partner

tabel użytkownika będzie obsługiwać tego rodzaju informacji

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

Podczas gdy Partner Tabl es wola zawiera wszystkie meta danych użytkownika, takich jak imię i nazwisko, itp

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

Kiedy użytkownik loguje się do serwisu Chcę tylko kilka pól, które są, username, email address, password, first name i last name. Są to tylko wymagane pola.

Informacje w tabelach partnerów można później wypełnić po zakończeniu rejestracji użytkownika na stronie.

Ale ze względu na strukturę klucza obcego, nie może postępować dalej z powodu tego błędu:

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

wiem, że to jest przyczyna przy stole krajów, które są wymagane przy stole partnerskim.
Moje pytanie brzmi: czy istnieje obejść więc mogę wypełnić kraj lub innych wymaganych danych na stole bez partnera, ale zachować schematu tabeli zagranicznej dla krajów, stanów itp

Odpowiedz

23

Ustaw country_id i state_id pustych , tak jak.

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

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

Jeśli trzeba zmienić pustych pól po utworzeniu schematu, wówczas linia powinna być $ RTV-> Integer ('country_id') -> pustych() -> unsigned() -> zmiana (); – sh6210