所以,我现在已经有好几天了。这就是我打算做的事情:
$premise = Premise::updateOrCreate(['premise_no' => request()->no_pendaftaran] ,
[
'premise_no' => request()->no_pendaftaran,
'premise_nama' => request()->nama_syarikat,
'premise_jenis' => request()->jenis_syarikat,
'premise_alamat' => request()->alamat,
'pemilik_id' => $pemilik->id,
'staf_id' => auth()->user()->staf_ic,
'status_amaran' => request()->amaran
]);
$summon = Summon::create([
'summon_maklumat' => $request->keterangan_pemeriksaan,
'kumpulan_id' => $request->kumpulan_id,
'premise_id' => $premise->id,
'akta_id' => $request->akta,
]);
但现在,premise
变量未返回此行id
中的'premise_id' => $premise->id,
并显示此错误:
但是,当我刷新页面并再次重新提交表单时,它已成功插入数据库。你们知道为什么会这样吗?我已经在谷歌上搜索了好几天了。暂时没有解决方案。帮助我。
答案 0 :(得分:1)
这是因为,在updateOrCreate()
函数中,当您的记录已经存在并且更新发生时,它不会返回该行的对象。它返回0或1。
这就是为什么当你尝试premise->id
时,它就像试图获取一个不可能的布尔值的属性而你得到错误,因为它实际上返回NULL。
我的建议是在这个上学:
$data = [
'premise_no' => request()->no_pendaftaran,
'premise_nama' => request()->nama_syarikat,
'premise_jenis' => request()->jenis_syarikat,
'premise_alamat' => request()->alamat,
'pemilik_id' => $pemilik->id,
'staf_id' => auth()->user()->staf_ic,
'status_amaran' => request()->amaran
];
$premise = Premise::where('premise_no', request()->no_pendaftaran)->first();
if(!empty($premise)){
Premise::where('premise_no', request()->no_pendaftaran)->update($data);
}
else{
try{
$premise = Premise::create($data);
}
catch(\Exception $e){
dd($e);
}
}
$summon = Summon::create([
'summon_maklumat' => $request->keterangan_pemeriksaan,
'kumpulan_id' => $request->kumpulan_id,
'premise_id' => $premise->id,
'akta_id' => $request->akta,
]);
答案 1 :(得分:0)
所以,我解决了自己的问题。它可能效率较低,但是,嘿......它完成了工作。所以我做的是使用$premise
覆盖Premise::where('premise_no',$request->no_pendaftaran)->first();
来获取新创建的对象。完整代码如下:
$premise = Premise::updateOrCreate(['premise_no' => $request->no_pendaftaran] ,
[
'premise_no' => $request->no_pendaftaran,
'premise_nama' => $request->nama_syarikat,
'premise_jenis' => $request->jenis_syarikat,
'premise_alamat' => $request->alamat,
'pemilik_id' => $pemilik->id,
'staf_id' => auth()->user()->staf_ic,
'status_amaran' => request()->amaran
]);
$premise = Premise::where('premise_no',$request->no_pendaftaran)->first();
$summon = Summon::create([
'summon_maklumat' => $request->keterangan_pemeriksaan,
'kumpulan_id' => $request->kumpulan_id,
'premise_id' => $premise->id,
'akta_id' => $request->akta,
]);
我知道它可能看起来多余但现在可行了。我不确定我是那个做错事的人还是Laravel的错误。还有其他帖子与我有类似的问题,这是1个月前还没有解决 - Laravel updateOrCreate general error field post_id doesn't exist。所以是的