2017-04-08 4 views
1

So, ich habe dieses Problem seit Tagen. Hier ist, was ich tun sollte:updateOrCreate gibt die ID-Spalte nicht zurück

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

Aber jetzt, das premise Variable zurückkehrt nicht die id in dieser Zeile 'premise_id' => $premise->id, und zeigt diesen Fehler:

the error message i got

Aber, wenn ich die Seite aktualisieren und senden Sie das Formular erneut erneut, es wurde erfolgreich in die Datenbank eingefügt. Sie haben eine Idee, warum ist das? Ich google das seit Tagen. Keine Lösung für jetzt. Hilf mir.

Antwort

0

Also, ich mein eigenes Problem gelöst. Es mag weniger effizient sein, aber, hey .. es macht die Arbeit erledigt. Also was ich getan habe, war überschreiben die $premise mit Premise::where('premise_no',$request->no_pendaftaran)->first();, um das neu erstellte Objekt zu erhalten. Der vollständige Code lautet wie folgt:

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

Ich weiß, es scheint überflüssig, aber jetzt funktioniert es. Ich bin mir nicht sicher, ob ich die Dinge falsch mache oder Laravels Käfer. Es gibt andere Pfosten, die ähnliches Problem zu meinem haben, das vor 1 Monat war und noch nicht gelöst worden ist - Laravel updateOrCreate general error field post_id doesn't exist. Also ja

1

Dies ist, weil in updateOrCreate() Funktion, wenn Ihr Datensatz bereits vorhanden ist und Aktualisierung stattfindet, gibt es nicht Sie das Objekt der Zeile zurück. Es gibt 0 oder 1 zurück.

Und das ist der Grund, wenn Sie versuchen, premise->id zu tun, es ist wie versucht, die Eigenschaft eines boolean zu bekommen, was nicht möglich ist, und Sie erhalten den Fehler, weil es tatsächlich NULL zurückgibt.

Mein Vorschlag ist, die alte Schule auf diesem gehen:

$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

Es macht Sinn. Aber aus der Dokumentation, die ich auf DevDocs.io verweise, heißt es, dass es die Klasse Model zurückgibt, anstatt boolean, wie du gesagt hast. Dies ist der Link dazu: [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

Geben Sie mir eine Minute, um die Installation von Laravel zu überprüfen. – Learner

+0

In der Zwischenzeit überprüfen Sie meine aktualisierte Antwort, wenn es für Sie funktioniert. – Learner

Verwandte Themen