首页 > 解决方案 > 如何检查记录是否存在并且不重复方法firstOrCreate laravel

问题描述

如何像这样在 for ex 中使用方法 firstOrCreate laravel

我试过像下面这样,这样做好吗?

$insert[] = [
   'bulan' => $bulan,
   'tahun' => $tahun,
   'nama_pkp'  => $v["nama_pkp"],
   'keterangan'=> $v["keterangan"],
   'no_faktur_pajak'   => $v["no_faktur_pajak"],
   'tgl_faktur_pajak'  => $tgl_faktur_pajak_format,
   'ref'   => $v["ref"],
   'dpp'   => $v["dpp"],
   'ppn'   => $ppn,
   'invoice_no'=> $v["invoice_no"],
   'nama_tenant'   => $v["nama_tenant"],
   'pph_4_deyon'   => $v["pph_4_deyon"],
   'pph_4_tenant'  => $v["ppn"],
   'no_p_l_tenant' => $v["no_potong_dan_lapor_tenant"],
   'bukpot_oleh_tenant'=> $v["bukti_potong_oleh_tenant"],
   'tgl_p_l_penyewa'   => $tgl_p_l_penyewa_format,
   'pph_p_l_tenant'=> $v["pph_potong_dan_lapor_tenant"],
   'note'  => $v["note"],
   'checklist' => $v["checklist"],
   'selisih'   => $selisih,
];

$insertData[] = Data::firstOrCreate($insert);

我有这样的错误

语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册

我添加了代码 AppServiceProvider

Schema::defaultStringLength(191);

我的代码有什么问题?

标签: laraveleloquent

解决方案


您已将多维数组传递给firstOrCreate,

firstOrCreate() 在找到匹配项之前检查所有参数是否存在。如果不是所有参数都匹配,则将创建模型的新实例。

如果您只想检查特定字段,请使用 firstOrCreate(['field_name' => 'value']) 数组中只有一个项目。这将返回第一个匹配的项目,如果没有找到匹配项,则创建一个新项目。

如果您在循环中使用它,那么它应该是这样的

foreach ($variable as $v) {
    $insert = [
        'bulan' => $bulan,
        'tahun' => $tahun,
        'nama_pkp'  => $v["nama_pkp"],
        'keterangan'=> $v["keterangan"],
        'no_faktur_pajak'   => $v["no_faktur_pajak"],
        'tgl_faktur_pajak'  => $tgl_faktur_pajak_format,
        'ref'   => $v["ref"],
        'dpp'   => $v["dpp"],
        'ppn'   => $ppn,
        'invoice_no'=> $v["invoice_no"],
        'nama_tenant'   => $v["nama_tenant"],
        'pph_4_deyon'   => $v["pph_4_deyon"],
        'pph_4_tenant'  => $v["ppn"],
        'no_p_l_tenant' => $v["no_potong_dan_lapor_tenant"],
        'bukpot_oleh_tenant'=> $v["bukti_potong_oleh_tenant"],
        'tgl_p_l_penyewa'   => $tgl_p_l_penyewa_format,
        'pph_p_l_tenant'=> $v["pph_potong_dan_lapor_tenant"],
        'note'  => $v["note"],
        'checklist' => $v["checklist"],
        'selisih'   => $selisih,
    ];

    $insertData[] = Data::firstOrCreate($insert);
}

除了循环大数组之外别无他法


推荐阅读