Bian
Bian

Reputation: 93

updateOrcreate() record new data when i update existing data

I want to use method updateOrcreate(), when data is an empty new record to the database, but when data is existing is updated data,

  1. like image bellow data is empty I want to record new data to database

this is data empty, I want to record new data to database

  1. like image bellow data is existing I want to update existing data and record to database

enter image description here

this is my code

public function simpanDataUn(Request $request)
{

    $mapel_ujian_id = $request->mapel_ujian_id;
    for($i=0; $i < count($mapel_ujian_id); $i++)
    {
        $arr = NilaiUjianAKhir::updateOrCreate([
            'sekolah_id'              => \Auth::user()->sekolah_id, 
            'siswa_id'                => $request->id,
            'mapel_ujian_id'          => $request->mapel_ujian_id[$i],
            'nilai_standar_daerah'    => $request->nilai_standar_daerah[$i],
            'predikat_standar_daerah' => $request->predikat_standar_daerah[$i],
            'nilai_sekolah'           => $request->nillai_sekolah[$i],
            'predikat_nilai_sekolah'  => $request->predikat_nillai_sekolah[$i],
            'nilai_akhir'             => $request->nilai_akhir[$i],
            'predikat_nilai_akhir'    => $request->predikat_nilai_akhir[$i],
        ],
        [
            'nilai_standar_daerah'    => $request->nilai_standar_daerah[$i],
            'predikat_standar_daerah' => $request->predikat_standar_daerah[$i],
            'nilai_sekolah'           => $request->nillai_sekolah[$i],
            'predikat_nilai_sekolah'  => $request->predikat_nillai_sekolah[$i],
            'nilai_akhir'             => $request->nilai_akhir[$i],
            'predikat_nilai_akhir'    => $request->predikat_nilai_akhir[$i],
        ]);

    }
    return redirect()->back()->with('success', 'Data UN berhasil di input');
}

I'm using updateOrCreate()method, but when i UPDATED existing data, the data and even create new data, not updated existing data, like image below:

enter image description here

What part is wrong from my code? how to updated existing data using updateOrCreate() method? please help me, thanks

Upvotes: 0

Views: 660

Answers (1)

Adrian Edy Pratama
Adrian Edy Pratama

Reputation: 4001

Maybe you can change your code like this :

public function simpanDataUn(Request $request)
{

    $mapel_ujian_id = $request->mapel_ujian_id;
    for($i=0; $i < count($mapel_ujian_id); $i++)
    {
        $arr = NilaiUjianAKhir::updateOrCreate([
            'sekolah_id'              => \Auth::user()->sekolah_id, 
            'siswa_id'                => $request->id,
            'mapel_ujian_id'          => $request->mapel_ujian_id[$i],
        ],
        [
            'nilai_standar_daerah'    => $request->nilai_standar_daerah[$i],
            'predikat_standar_daerah' => $request->predikat_standar_daerah[$i],
            'nilai_sekolah'           => $request->nillai_sekolah[$i],
            'predikat_nilai_sekolah'  => $request->predikat_nillai_sekolah[$i],
            'nilai_akhir'             => $request->nilai_akhir[$i],
            'predikat_nilai_akhir'    => $request->predikat_nilai_akhir[$i],
        ]);

    }
    return redirect()->back()->with('success', 'Data UN berhasil di input');
}

Like @lagbox say the first array passed to updateOrCreate are the where conditions to find a record ... if it can't find a record by those conditions it will create a new one. You won't create the new one when there's same sekolah_id, siswa_id or mapel_ujian_id right? Then the other field can be updated

Upvotes: 1

Related Questions