2017-04-08 13 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

しかし、再度フォームを再送信すると、正常にデータベースに挿入されます。あなたたちはなぜこれが何であるか考えていますか?私は今これを数日間探しています。今のところ解決策はありません。助けて。

答えて

0

、私は私自身の問題を解決しました。それはあまり効率的ではないかもしれませんが、ちょっと..仕事を終わらせます。だから私は、を使って$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, 
    ]); 

私はそれが冗長に見えるかもしれませんが、今は動作します。私は間違ったやり方やララベルのバグをしている人だとは確信していません。 1ヶ月前に解決されていない私のものと同様の問題を抱える他の投稿があります。Laravel updateOrCreate general error field post_id doesn't existだからええ

1

これは、レコードがすでに存在し、更新が発生したときにupdateOrCreate()の機能があるため、行のオブジェクトを返さないためです。 0または1を返します。

premise->idを実行しようとすると、それが不可能なブール値のプロパティを取得しようとしたときに、実際にNULLを返すためエラーが発生します。

私の提案はこの1つ上の古い学校に行くことです:だから

$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

関連する問題