默认情况下无法使外键获取其引用的id值

时间:2017-12-27 15:33:01

标签: php mysql laravel laravel-5

我是LARAVEL的新手,我遇到了一些问题。

我的问题是,当我将数据插入第一个表时,我可以看到它默认情况下已经安置了一个ID,但是当我将数据插入第二个表时,我一直收到此错误:

  

SQLSTATE [HY000]:常规错误:1364字段'etudiant_id'没有   默认值

如何为外键提供第一个表的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";

}

1 个答案:

答案 0 :(得分:0)

您需要将外键添加到您尝试插入的数据中。所以,改变这些界限:

 $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";
}