我是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";
}
答案 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";
}