2016-06-09 13 views
7

Tôi đã các bảng hai cơ sở dữ liệu:Laravel Database Schema, Nullable Ngoại

  1. Bàn tài
  2. Partner Bàn

tài Bàn sẽ xử lý các loại thông tin

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

Trong khi Tab đối tác es sẽ chứa tất cả các thông tin người dùng meta như tên đầu tiên và tên cuối cùng vv

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

Khi một người dùng được đăng ký vào trang web tôi chỉ muốn vài lĩnh vực mà, username, email address, password, first namelast name. Đây chỉ là các trường bắt buộc.

Vì vậy, thông tin trong bảng đối tác có thể được điền sau này sau khi người dùng hoàn tất đăng ký trang web.

Nhưng do cấu trúc của chính nước ngoài, tôi không thể tiến hành thêm bất kỳ vì lỗi này:

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

Tôi biết điều này là nguyên nhân gây ra bởi bảng các nước được yêu cầu của bảng đối tác.
Câu hỏi của tôi là: là có một công việc xung quanh vì vậy tôi có thể điền vào các quốc gia hoặc bất kỳ dữ liệu không cần thiết khác trên bàn đối tác nhưng giữ schema bảng nước ngoài cho các nước, khẳng định vv

Trả lời

23

Đặt country_idstate_id nullable , như vậy.

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

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

Nếu bạn cần phải thay đổi nullable lĩnh vực sau khi tạo lược đồ, sau đó dòng nên $ Bảng-> số nguyên ('country_id') -> nullable() -> unsigned() -> thay đổi (); – sh6210

Các vấn đề liên quan