laravel - 如何检查记录是否存在并且不重复方法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);
我的代码有什么问题?
解决方案
您已将多维数组传递给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);
}
除了循环大数组之外别无他法
推荐阅读
- vue.js - 找不到模块'@/assets/
.svg'。@vue/cli 版本:4.2.3 和 4.3.1 - sql - 在表中查找 SQL Server 中的非空列
- java - 在 Java 中使用锚标记链接到外部 URL
- c - 为什么带有 \n 的 printf() 仍然无法在 Windows 上刷新?
- python-3.x - Tensorflow 2.1 TPU v2 使用 bfloat16 减少内存使用
- php - Twilio 未捕获的 Twilio\Exceptions\RestException:[HTTP 401] 无法获取记录:
- swift - 导航栏按钮有时不可点击
- angular - 带有验证的 Angular 反应表单:错误类型错误:无法读取未定义的属性“firstName”
- python - 为什么这个 Python 嵌套的 for 循环会产生我得到的输出?
- apache-spark - Gcloud 计算 ssh --zone=us-east1-d --ssh-flag="-D" --ssh-flag="10000" --ssh-flag="-N" "spark-01-m" 不是在职的