首页 > 解决方案 > updateOrcreate() 在我更新现有数据时记录新数据

问题描述

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

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

这是数据空,我想将新数据记录到数据库

  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],
        ],
        [
            '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()方法,但是当我更新现有数据时,数据甚至创建新数据,而不是更新现有数据,如下图所示:

在此处输入图像描述

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

标签: laraveleloquent

解决方案


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

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_id如果有相同的,您不会创建新的siswa_idmapel_ujian_id对吗?然后可以更新其他字段


推荐阅读