默认情况下无法使外键获取其引用的id值
问题描述:
我是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";
}
答
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";
}
耶它的作品,感谢您的帮助很大。 – El7or