2017-12-27 266 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