2015-08-09 51 views
1

嗨,大家好,我想知道你們中的任何一個人是否嘗試過使用3個相關的表格在laravel的表格中插入一條記錄?例如Laravel插入3個相關表格

// Database Schema for Pharmacy 
Schema::create('pharmacies', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('name'); 
     $table->text('address'); 
}); 

// Relationship in App\Pharmacy table 
public function pharmacists() { 
    return $this->hasMany('App\Pharmacist'); 

} 

現在我有另一個表

Schema::create('pharmacists', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->integer('pharmacy_id')->unsigned()->index(); 
     $table->foreign('pharmacy_id')->references('id')->on('pharmacies')->onDelete('cascade'); 
     $table->string('fname'); 
}); 

// And this is the relationship in App\Pharmacist class 
public function account() { 
    return $this->hasOne('App\Account'); 
} 

public function pharmacy() { 
    return $this->belongsTo('App\Pharmacy'); 
} 

現在第三臺

// This contain the foreign key for pharmacist_id 
Schema::create('accounts', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->integer('pharmacist_id')->unsigned()->index(); 
     $table->foreign('pharmacist_id')->references('id')->on('pharmacists')->onDelete('cascade'); 
     $table->string('username')->unique(); 
}); 

// This is the relationship in App\Account class 
public function pharmacists() { 
    return $this->belongsTo('App\Pharmacist'); 
} 

現在我試圖AccountsController下

$input = Request::all(); 

    $pharmacy = Pharmacy::create([ 
        "name" => "Wendies Chicken", 
        "address" => "My Address",       
       ]); 

    $pharmacists = new Pharmacist([ 
     "fname" => "Administrator",    
    ]); 

    $account = new Account([ 
     "username" => "root",    
    ]); 

    $pharmacists->account()->save($account); 
    $pharmacy->pharmacists()->save($pharmacists); 

保存這個使用此代碼但我收到了一封電子郵件恐怖說

Integrity constraint violation: 1048 Column 'pharmacist_id' cannot be null (SQL: insert into `accounts` (`username`, `pharmacist_id`, `updated_at`, `created_at`) values (root, 2015-08-09 05:13:31, 2015-08-09 05:13:31)) 

不知道如何保存這只是一個節省。我想保存3個相關表中的記錄。有人可以幫我弄這個嗎。由於

回答

0

當您執行此代碼

$pharmacists->account()->save($account); 
$pharmacy->pharmacists()->save($pharmacists); 

居然沒有任何數據pharmacy_id所以這就是問題所在。所以,你應該要麼改變你的架構pharmacy_id,並設置它的值作爲default 0

$pharmacy = Pharmacy::create([ 
       "name" => "Wendies Chicken", 
       "address" => "My Address",       
      ]); 

$pharmacy->pharmacists()->save([ 
    "fname" => "Administrator",    
]); 

$pharmacy->pharmacists()->account()->save([ 
    "username" => "root",    
]); 
+0

此問題解決了非常感謝,雖然我這樣做,而不是$ pharmacy->藥劑師() - >保存($藥師) - >賬戶() - >保存($帳戶);它似乎也起作用。謝謝你 –

0

試試這個

$input = Request::all(); 

$pharmacy = Pharmacy::create([ 
    "name"    => "Wendies Chicken", 
    "address"   => "My Address",       
]); 

$pharmacists = Pharmacist::create([ 
    "pharmacy_id"  => $pharmacy->id, 
    "fname"    => "Administrator", 
]); 

$account = Account::create([ 
    "pharmacist_id"  => $pharmacists->id 
    "username"   => "root",    
]);