2017-12-27 265 views
3

我是LARAVEL中的新成員,並且出現了一些問題。默認情況下無法使外鍵獲取其引用的id值

我的問題是,當我將數據插入到第一個表,我可以看到,它在默認情況下解決一個id,但是當我將數據插入到第二個表我不斷收到此錯誤:

SQLSTATE[HY000]: General error: 1364 Field 'etudiant_id' doesn't have a default value

什麼我應該如何給外鍵第一個表的ID號?

這是我的架構:

第一表-etudiant-:

public function up() 
{ 
    Schema::create('etudiants', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('nom'); 
     $table->timestamps(); 
    }); 
} 

第二表-bac2-:

public function up() 
{ 
    Schema::create('bac2', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->integer('etudiant_id')->unsigned(); 
     $table->foreign('etudiant_id')->references('id')->on('etudiants')- 
     >onDelete('cascade') ; 
     $table->date('anne_bac2'); 
     $table->timestamps(); 

    }); 
} 

這是我的插入功能:

function insert(Request $req){ 

    $nom = $req->input('name'); 

    $data= array('nom'=>$nom); 

    $anne_bac2 = $req->input('anne_bac2'); 

    $data2= array('anne_bac2'=>$anne_bac2); 


    DB::table('etudiants')->insert($data); 
    DB::table('bac2')->insert($data2); 

return "success"; 

} 

回答

0

You nee d將外鍵添加到您嘗試插入的數據中。因此,改變這些行:

$data2= array('anne_bac2'=>$anne_bac2); 
DB::table('etudiants')->insert($data); 
DB::table('bac2')->insert($data2); 

要:

$etudiantId = DB::table('etudiants')->insertGetId($data); 
$data2 = ['anne_bac2' => $anne_bac2, 'etudiant_id' => $etudiantId]; 
DB::table('bac2')->insert($data2); 

或者更好的重構整個方法:

function insert(Request $request) 
{ 
    $etudiantId = DB::table('etudiants')->insertGetId(['nom' => $request->name]); 
    DB::table('bac2')->insert(['anne_bac2' => $request->anne_bac2, 'etudiant_id' => $etudiantId]); 
    return "success"; 
} 
+1

耶它的作品,感謝您的幫助很大。 – El7or