当我更新现有数据时,updateOrcreate()记录新数据

时间:2019-11-28 07:32:39

标签: laravel eloquent

我想使用方法updateOrcreate(),当数据是数据库的空新记录时,而当数据存在时是更新数据,

  1. 像下面这样的图像数据为空,我想将新数据记录到数据库

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

  1. 像下面这样的图像数据已存在,我想更新现有数据并记录到数据库

enter image description here

这是我的代码

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');
}

我正在使用updateOrCreate()方法,但是当我 UPDATED 现有数据时,该数据 甚至创建新数据,而不是更新现有数据,如下图所示:

enter image description here

我的代码的哪一部分有问题?如何使用 updateOrCreate()方法更新现有数据? 请帮助我,谢谢

1 个答案:

答案 0 :(得分:1)

也许您可以像这样更改代码:

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');
}

就像@lagbox一样,传递给updateOrCreate的第一个数组是查找记录的条件……如果无法通过这些条件查找记录,它将创建一个新记录。如果sekolah_idsiswa_idmapel_ujian_id相同,就不会创建新的对吗?然后可以更新其他字段