2017-04-08 79 views
1

所以,我現在有這個問題好幾天了。這就是我打算做的事:updateOrCreate不返回'id'列

$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並顯示此錯誤:

the error message i got

但是,當我刷新頁面並重新提交表單,它已成功插入到數據庫中。你們知道這是爲什麼嗎?現在我一直在使用這個Google。現在沒有解決方案。幫我。

回答

0

所以,我解決我自己的問題。這可能效率較低,但是,嘿..它完成了工作。所以我做的是用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的錯誤行事的人。還有其他一些與我的問題類似的帖子,一個月前還沒有解決 - Laravel updateOrCreate general error field post_id doesn't exist。所以是的

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

它是有道理的。但是,從我在DevDocs.io中引用的文檔中,它說它正在返回Model類而不是像你所說的布爾值。這是鏈接到:[http://devdocs.io/laravel~5.4/api/5.4/illuminate/database/eloquent/builder#method_updateOrCreate](http://devdocs.io/laravel~5.4/api/5.4/illuminate/database/eloquent/builder#method_updateOrCreate) – kamudrikah

+1

給我一分鐘檢查Laravel的安裝。 – Learner

+0

同時檢查我的更新答案,如果它適合你。 – Learner