updateOrCreate 不返回 'id' 列

updateOrCreate not returning the 'id' column

所以,这个问题困扰我好几天了。这是我打算做的:

$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 变量没有在这一行 'premise_id' => $premise->id, 中返回 id 并显示此错误:

但是,当我刷新页面并重新提交表单时,它成功地插入到数据库中。你们知道这是为什么吗?我已经用谷歌搜索了好几天了。暂无解决方案。帮帮我。

这是因为,在 updateOrCreate() 函数中,当您的记录已经存在并且发生 更新 时,它不会 return 您是行的对象。 return你是 0 还是 1。

这就是为什么当您尝试执行 premise->id 时,就像尝试获取布尔值的 属性 这是不可能的,并且您会收到错误,因为它实际上是 returns空。

我的建议是在这方面走老路:

$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,
]);

所以,我解决了我自己的问题。它可能效率较低,但是,嘿..它完成了工作。所以我所做的是通过使用 Premise::where('premise_no',$request->no_pendaftaran)->first(); 覆盖 $premise 来获取新创建的对象。完整代码如下:

$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 的错误。还有其他 post 有与我的问题类似的问题,这是 1 个月前的问题,但仍未解决 - Laravel updateOrCreate general error field post_id doesn't exist。所以是的