updateOrCreate不返回' id'柱

时间:2017-04-08 18:42:14

标签: laravel eloquent laravel-5.4

所以,我现在已经有好几天了。这就是我打算做的事情:

$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,并显示此错误:

the error message i got

但是,当我刷新页面并再次重新提交表单时,它已成功插入数据库。你们知道为什么会这样吗?我已经在谷歌上搜索了好几天了。暂时没有解决方案。帮助我。

2 个答案:

答案 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。所以是的